如何使CStatic控件(MFC)透明?

我的应用程序有一个图像填充整个对话框的开始对话框。 另外还有一个CStatic控件,它为用户显示一些可变信息。 我使用以下代码使CStatic控件透明:

HBRUSH CStartbildDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if(pWnd->GetDlgCtrlID() == IDC_STATIC_INFO) { pDC->SetBkMode(TRANSPARENT); return reinterpret_cast<HBRUSH>(::GetStockObject(NULL_BRUSH)); } else return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); } 

当我使用GetDlgItem(IDC_STATIC_INFO)->SetWindowText更改静态控件的文本时,新文本与旧文本重叠(旧文本不会被删除)。 我试图重新调用GetDlgItem(IDC_STATIC_BILD)->Invalidate()调用SetWindowText图像的背景,但没有任何信息文本显示(旧的和新的)。

你知道我怎样才能使静态控制透明,所以我也可以覆盖它与一个新的文字?

谢谢你的帮助!

解决scheme:来自Sanja的codeproject-link的方法2(改编)为我工作。

 GetDlgItem(IDC_STATIC_INFO)->SetWindowText(tmp); CRect rect; GetDlgItem(IDC_STATIC_INFO)->GetWindowRect(&rect); ScreenToClient(&rect); InvalidateRect(&rect); UpdateWindow(); 

嗨,你可以在这里找到透明的静态示例

这个答案是相关的Windows API而不是MFC框架,但是这些概念翻译easilly:

正确的方法来做WINAPI中的透明按钮

你的问题是,使用Win32本地控件实现透明控件与重新绘制发生时实现无闪烁控件冲突。