我正在使用Visual Studio 2005中的Dialog编辑器创建一个带有静态文本控件的对话框。我希望静态文本控件的背景是透明的,因为我在它下面使用静态图像控件,灰色文本背景看起来很可怕。在编辑器中,我将“透明”属性设置为True,它使背景变得透明,就像我想要的那样。但是一旦我运行我的应用程序并使用SendMessage(hText,WM_SETTEXT,0L,“newtext”)更改文本,背景就会失去透明度并再次变为灰色。有任何想法吗?顺便说一句,我是用C ++做的。
提前感谢您的帮助!
答案 0 :(得分:2)
正如Anthony Johnson所说,处理对话框中的WM_CTLCOLORSTATIC
消息(您不必处理WM_NOTIFY
- 我不相信静态控件会使用该消息,无论如何)。但是将背景模式设置为透明似乎不够。您还必须将背景画笔设置为空画笔。这样的东西应该可以工作(在你的DialogProc中):
case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam, TRANSPARENT);
return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);
如果更改静态控件上的文本,则可能必须使其下方的内容无效,以便在执行此操作时正确绘制。
答案 1 :(得分:1)
尝试隐藏控件,然后设置文本,然后显示它。
答案 2 :(得分:0)
我不知道如何在对话框编辑器中执行此操作,但如果您在静态父窗口中处理WM_NOTIFY消息,静态将在绘制静态之前发送WM_CTLCOLORSTATIC消息。在那里,如果你调用SetBkMode((HDC)wParam,TRANSPARENT);,这应该使静态具有透明背景。