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

标签 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 更改静态控件的文本时,新文本与旧文本重叠(旧文本未被删除)。我试图在使用 GetDlgItem(IDC_STATIC_BILD)->Invalidate() 调用 SetWindowText 图像之前重新绘制背景,但是没有显示任何信息文本(无论是旧的还是新的) ).

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

感谢您的帮助!

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

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

最佳答案

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

关于windows - 如何使 CStatic 控件 (MFC) 透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564016/

相关文章:

windows - 为什么会有像 WriteProcessMemory 这样的函数可用?

c - 有没有更好的方法将格式化输出传递给 OutputDebugString?

c++ - 添加图标时 CMFCStatusBar 更改高度

.net - 在非 .NET 应用程序中抛出 SEHException

c++ - 使用 SendMessage() 的鼠标单击不会移交给窗口

c++ - Eclipse、minGW 和 C++11

windows - 如何在没有 Chef 服务器的情况下运行 Chef ( Chef solo/Chef 零)

sockets - 我如何知道何时进行 UTF8 或 punycode DNS 查询?

c++ - 考虑到我有一个引用该控件的 CWnd 对象,有没有办法获取对 MFC 对话框上所有子窗口或控件的引用?

python - Windows - 执行不带 .exe 扩展名的可执行文件 (.exe)