如何使分组框文本背景透明

How to make the group-box text background transparent

本文关键字:文本 背景 透明 何使      更新时间:2023-10-16

我想制作一个透明的对话框。我在CDialog派生类中捕获了OnCtlColor消息。。。这是代码:

HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   if(bSetBkTransparent_)
   {
      pDC->SetBkMode(TRANSPARENT);
      hbr = (HBRUSH)GetStockObject(NULL_BRUSH);        
   }

   return hbr;
}

它适用于除组框(CStatic)之外的所有控件。所有标签(CStatic)都绘制有透明的文本背景,但组框的文本是不透明的。

我已经在谷歌上搜索过了,但没有找到解决方案。有人知道如何制作真正透明的群组框吗?

顺便说一下,我在WindowsXP中工作。如果应用程序迁移到另一个操作系统,我不想完全绘制控件以避免必须更改代码。

谢谢,

哈维尔

注意:我最后更改了对话框,这样就不需要使其透明。无论如何,我添加这些信息是因为可能有人还在尝试。groupbox不是CStatic,而是CButton(我知道这不是新的)。我把WindowsXP主题改成了Windowsclassic,然后分组框背景是透明的。坏消息是,在这种情况下,框架线在文本下方可见。。。因此,如果有人遵循这种方法,我认为他/她可能会更好地遵循Adzm的建议。

您有两个选项。

你不能使用Common Controls v6(XP样式的控件),这将使你的应用程序失去新windows版本的吸引力。然而,IIRC的分组箱将尊重CTCOLOR问题。如果你无论如何都不使用它,而且它仍然不尊重你的颜色,那么你只有一个选择。。。

就是自己画。我知道你说过你不想,但有时你不得不这样做。谢天谢地,团体框是一个非常简单的控制。本页提供了一个绘制经典样式组框的示例:http://www.codeguru.com/cpp/controls/controls/groupbox/article.php/c2273/您也可以使用XP+附带的UxTheme库非常简单地绘制它。

如果应用程序将被迁移到另一个操作系统,那么通常情况下,在MFC应用程序上进行迁移将有很多问题需要处理。如果这是您的目标,那么您应该真正考虑使用跨平台UI工具包进行开发。

只需为组框设置WS_EX_TRANSPARENT扩展窗口样式。

我知道这是一个12年前的问题,但到目前为止还没有人正确回答,这让我很沮丧。

您所要做的就是处理WM_CTLCOLORSTATIC:

case WM_CTLCOLORSTATIC: 
{
    HDC hDC = (HDC)wParam;
    SetTextColor(hDC, RGB(255, 255, 255));
    SetBkMode(hDC, TRANSPARENT);
    return (INT_PTR)GetStockObject(HOLLOW_BRUSH);
}
break;