【问题标题】:Visual Studio 2005: static text control won't display with transparent backgroundVisual Studio 2005:静态文本控件不会以透明背景显示
【发布时间】:2025-12-21 12:50:11
【问题描述】:

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

提前感谢您的帮助!

【问题讨论】:

    标签: c++ visual-studio-2005 visual-c++-2005


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】: