【发布时间】:2011-07-30 15:48:09
【问题描述】:
我的应用程序有一个带有填充整个对话框的图像的开始对话框。另外还有一个 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 图像之前,我尝试重新绘制背景,但随后没有显示任何信息文本(无论是旧的还是新的)。
你知道如何使静态控件透明,以便我也可以用新文本覆盖它吗?
感谢您的帮助!
解决方案: 来自 Sanja 的 codeproject-link 的方法 2(改编)对我有用。
GetDlgItem(IDC_STATIC_INFO)->SetWindowText(tmp);
CRect rect;
GetDlgItem(IDC_STATIC_INFO)->GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect);
UpdateWindow();
【问题讨论】: