Visual Studio 2005:静态文本控件不会以透明背景显示

发布于 2024-07-13 02:23:18 字数 292 浏览 6 评论 0原文

我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤者何惧 2024-07-20 02:23:18

正如 Anthony Johnson 所说,处理对话框中的 WM_CTLCOLORSTATIC 消息(您不必处理 WM_NOTIFY - 无论如何,我不相信静态控件会使用该消息) 。 但将背景模式设置为透明似乎还不够。 您还必须将背景画笔设置为空画笔。 像这样的东西应该可以工作(在您的 DialogProc 中):

case WM_CTLCOLORSTATIC:
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);

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

As Anthony Johnson said, handle the WM_CTLCOLORSTATIC message in the dialog box (you don't have to handle WM_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):

case WM_CTLCOLORSTATIC:
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);

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.

太傻旳人生 2024-07-20 02:23:18

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

Try hiding the control, then setting the text, then showing it.

秋意浓 2024-07-20 02:23:18

我不知道如何在对话框编辑器中执行此操作,但是如果您在静态的父窗口中处理 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文