我的应用程序有一个开始对话框,其中包含一张填满整个对话框的图像。另外还有一个 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
图像之前重新绘制背景,但是没有显示任何信息文本(无论是旧的还是新的) ).
您知道如何使静态控件透明,以便我也可以用新文本覆盖它吗?
感谢您的帮助!
解决方案: codeproject-link 中的方法 2(改编)来自 Sanja 的为我工作。
GetDlgItem(IDC_STATIC_INFO)->SetWindowText(tmp);
CRect rect;
GetDlgItem(IDC_STATIC_INFO)->GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect);
UpdateWindow();
最佳答案
您好,您可以找到透明静态样本 here
关于windows - 如何使 CStatic 控件 (MFC) 透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564016/