如何使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图像之前重新绘制背景,但随后没有显示信息文本(既不是旧的也不是新的)。

你知道我如何使静态控件透明,以便我也可以用一个新的文本覆盖它吗?

谢谢你的帮助!

解决方案:方法2(改编)来自Sanja的codeproject-link,对我很有效。

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

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

这个答案与Windows API有关,而不是与MFC框架有关,但是这些概念很容易翻译:

WINAPI中透明按钮的正确方法

您的问题是使用Win32本地控件实现透明控件与重绘时实现无闪烁控件冲突。

最新更新