Visual Studio 2005:静态文本控件不会以透明背景显示
我使用 Visual Studio 2005 中的对话框编辑器创建一个带有静态文本控件的对话框。 我希望静态文本控件的背景是透明的,因为我在其下面使用静态图像控件,并且灰色文本背景看起来很丑陋。 在编辑器中,我将“透明”属性设置为 True,它会导致背景变得透明,就像我想要的那样。 但是,一旦我运行我的应用程序并使用 SendMessage(hText, WM_SETTEXT, 0L, "newtext") 更改文本,背景就会失去透明度并再次变为灰色。 有任何想法吗? 顺便说一句,我是用 C++ 做的。
在此先感谢您的帮助!
I'm using the Dialog editor in Visual Studio 2005 to create a Dialog box with a static text control. I'd like the background of the static text control to be transparent since I'm using an static image control underneath it and the grey text background looks hideous. In the editor, I set the "Transparent" attribute to True and it causes the background to go transparent just like I want it to. But as soon as I run my app and change the text using a SendMessage(hText, WM_SETTEXT, 0L, "newtext"), the background loses its transparency and goes grey again. Any ideas? Btw, I'm doing this in C++.
Thanks in advance for your help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
正如 Anthony Johnson 所说,处理对话框中的
WM_CTLCOLORSTATIC
消息(您不必处理WM_NOTIFY
- 无论如何,我不相信静态控件会使用该消息) 。 但将背景模式设置为透明似乎还不够。 您还必须将背景画笔设置为空画笔。 像这样的东西应该可以工作(在您的 DialogProc 中):如果您更改静态控件上的文本,您可能必须使其下面的内容无效,以便在您执行此操作时正确绘制。
As Anthony Johnson said, handle the
WM_CTLCOLORSTATIC
message in the dialog box (you don't have to handleWM_NOTIFY
- I don't believe static controls use that message, anyway). But it doesn't seem to be enough to set the background mode to transparent. You also have to set the background brush to a null brush. Something like this should work (in your DialogProc):If you change the text on the static control, you may have to invalidate what's underneath it for it to draw correctly when you do this.
尝试隐藏控件,然后设置文本,然后显示它。
Try hiding the control, then setting the text, then showing it.
我不知道如何在对话框编辑器中执行此操作,但是如果您在静态的父窗口中处理 WM_NOTIFY 消息,则静态将在绘制静态之前发送 WM_CTLCOLORSTATIC 消息。 在那里,如果您调用 SetBkMode((HDC)wParam, TRANSPARENT);,这应该使静态具有透明背景。
I don't know how you can do it in the dialog editor, but if you handle the WM_NOTIFY message in the static's parent window, the static will send a WM_CTLCOLORSTATIC message before drawing the static. There, if you call SetBkMode((HDC)wParam, TRANSPARENT);, that should make the static have a transparent background.