3

我正在使用 Visual Studio 2005 中的对话框编辑器来创建一个带有静态文本控件的对话框。我希望静态文本控件的背景是透明的,因为我在它下面使用了一个静态图像控件,而灰色文本背景看起来很可怕。在编辑器中,我将“透明”属性设置为 True,它使背景变得透明,就像我想要的那样。但是,一旦我运行我的应用程序并使用 SendMessage(hText, WM_SETTEXT, 0L, "newtext") 更改文本,背景就会失去透明度并再次变灰。有任何想法吗?顺便说一句,我正在用 C++ 做这个。

在此先感谢您的帮助!

4

3 回答 3

2

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.

于 2009-01-16T00:22:14.033 回答
1

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

于 2009-01-15T19:22:15.917 回答
0

我不知道如何在对话框编辑器中做到这一点,但是如果您在静态的父窗口中处理 WM_NOTIFY 消息,静态将在绘制静态之前发送 WM_CTLCOLORSTATIC 消息。在那里,如果您调用 SetBkMode((HDC)wParam, TRANSPARENT);,那应该使静态具有透明背景。

于 2009-01-15T19:57:56.907 回答