Visual Studio 2005:静态文本控件无法显示透明背景。

3
我正在使用Visual Studio 2005中的对话框编辑器创建一个带有静态文本控件的对话框。由于我在它下面使用了静态图像控件,因此灰色文本背景看起来很丑,所以我希望静态文本控件的背景是透明的。在编辑器中,我将“Transparent”属性设置为True,这会使背景变成透明,就像我想要的一样。但是,当我运行我的应用程序并使用SendMessage(hText, WM_SETTEXT, 0L, "newtext")更改文本时,背景失去了透明度并再次变成灰色。有什么好的解决办法吗?顺便说一句,我是用C++做的。谢谢您提前的帮助!
3个回答

2
如Anthony Johnson所说,在对话框中处理WM_CTLCOLORSTATIC消息(您不必处理WM_NOTIFY - 我不认为静态控件使用该消息)。但似乎仅将背景模式设置为透明是不够的。您还必须将背景画刷设置为null brush。类似以下代码应该可以工作(在您的DialogProc中):
case WM_CTLCOLORSTATIC:
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);

如果您更改静态控件上的文本,则可能需要使其下方的内容无效,以便在执行此操作时正确绘制。


1
尝试隐藏控件,然后设置文本,最后显示它。

0
我不知道你如何在对话框编辑器中实现它,但如果你在静态控件的父窗口中处理WM_NOTIFY消息,那么在绘制静态控件之前,静态控件将发送WM_CTLCOLORSTATIC消息。在那里,如果你调用SetBkMode((HDC)wParam, TRANSPARENT);,那应该可以使静态控件具有透明背景。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接