【问题标题】:How to make a CStatic control (MFC) transparent?如何使 CStatic 控件 (MFC) 透明?
【发布时间】: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)-&gt;SetWindowText更改静态控件的文本时,新文本与旧文本重叠(旧文本没有被删除)。在使用GetDlgItem(IDC_STATIC_BILD)-&gt;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();

【问题讨论】:

标签: windows winapi mfc dialog


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Correct way to do transparent buttons in WINAPI

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多