我想做一个透明的对话框。我在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)均涂有透明文本背景,但组框的文本不是透明的。
我已经用谷歌搜索了,但是没有找到解决方案。有人知道如何制作一个真正透明的分组框吗?
顺便说一句,我正在Windows XP中工作。而且,我不想完全绘制控件,以避免在将应用程序迁移到另一个OS时不必更改代码。
谢谢,
哈维尔
注意:我终于更改了对话框,因此无需使其透明。无论如何,我添加此信息是因为也许有人仍在尝试这样做。 groupbox不是CStatic,而是CButton(我知道这不是新的)。我将Windows XP主题更改为Windows classic,然后groupbox backgraund是透明的。坏消息是,在这种情况下,框架线在文本下方可见...因此,如果有人遵循此方法,我想他/她最好遵循Adzm的建议。
最佳答案
您有两个选择。
您不能使用Common Controls v6(XP样式的控件),这会使您的应用失去新版Windows的幻想。但是IIRC groupbox将遵守CTLCOLOR问题。如果您仍然不使用它,并且仍然不尊重您的颜色,那么您只有一个选择...
这是自己绘制的。我知道您说过您不想,但有时您必须这样做。幸运的是,组框是一个非常简单的绘制控件。该页面有一个绘制经典样式的组框的示例:http://www.codeguru.com/cpp/controls/controls/groupbox/article.php/c2273/您也可以使用XP +随附的UxTheme库非常简单地绘制它。
如果将应用程序迁移到另一个OS,通常您将有很多工作要通过MFC应用程序进行迁移。如果这是您的目标,那么您应该真正考虑使用跨平台的UI工具包进行开发。