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

Chr*_*mer 6 windows winapi mfc dialog

我的应用程序有一个启动对话框,其中包含一个填充整个对话框的图像.另外还有一个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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助!

解决方案:来自Sanja 的codeproject-links的方法2(改编)为我工作.

GetDlgItem(IDC_STATIC_INFO)->SetWindowText(tmp);
CRect rect;
GetDlgItem(IDC_STATIC_INFO)->GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect);
UpdateWindow();
Run Code Online (Sandbox Code Playgroud)

San*_*huk 3

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