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

时间:2011-04-06 09:14:09

标签: 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);
}

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

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

感谢您的帮助!

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

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

2 个答案:

答案 0 :(得分:3)

您好,您可以找到透明静态样本here

答案 1 :(得分:0)

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

Correct way to do transparent buttons in WINAPI

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