如何使分组框文本背景透明
How to make the group-box text background transparent
我想制作一个透明的对话框。我在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;
- 同一图像中的反转文本和背景颜色
- 如何将控制台输出的文本颜色更改为红色,但如果从Powershell或CMD运行,背景将保持相同的颜色
- OpenGL 将来自 ttf 的渲染器文本与背景纹理组合在一起时出错
- 如何在C Win32 GUI中为文本框设置默认背景(灰色)文本
- 当我使用 DirectWrite 在 GDI hdc 上绘制文本时,如何设置透明背景
- 在 qlabel 中将图像设置为背景并在其顶部设置文本
- 如何在wxtreelistctrl中设置文本背景颜色
- 无法更改 Visual Studio 2010 中输出的文本颜色和文本背景
- 为qlineedit设置了背景图像时,如何在qlineedit中设置文本颜色
- 如何使用 c++/WinAPI 绘制具有透明背景的文本
- CPaneDialog控件背景(文本控件)
- 如何更改文本和背景颜色
- 如何更改QTreeWidgetItem部分的背景或文本颜色
- WIN32API:当点击时,所有者绘制的按钮会在文本周围创建白色背景
- 在Windows控制台中更改背景和文本颜色,c++
- 如何获得当前控制台背景和文本颜色
- MFC自定义控制背景/文本颜色
- 如何在CBitmap上使用透明背景的CDC绘制文本
- 具有透明文本背景而不是默认白色的树视图节点
- 如何使分组框文本背景透明