【问题标题】:(Win API) I cannot change title bar (non-client area) color with WM_NCPAINT(Win API)我无法使用 WM_NCPAINT 更改标题栏(非客户区)颜色
【发布时间】:2011-06-17 21:28:40
【问题描述】:

我试图在 WM_NCPAINT 中设置背景颜色来改变标题栏的颜色,但它不会以某种方式改变。问题是,SetBkColor 和 SetTextColor 对 WM_NCPAINT 有效吗?

case WM_NCPAINT:
        {
            HDC hdc = ::GetWindowDC(hwnd);

            ::SetTextColor(hdc,RGB(0,0,0));
            ::SetBkColor(hdc,RGB(255,255,255));
            ReleaseDC(hwnd,hdc);
            return 0;
        }

【问题讨论】:

  • 如果您在 vista 或更高版本上执行此操作,由于新的桌面窗口管理器,它根本无法工作。哦,无论如何你都需要画点东西!

标签: c++ windows


【解决方案1】:

这些函数是有效的,但你没有画任何东西。试试FillRect 或类似的东西。

【讨论】:

    【解决方案2】:

    您应该注意的第一件事是这些函数可能失败。如果只是记录它们失败的事实,您应该始终检查返回值。

    其次,我认为这些颜色只会影响未来对给定上下文的TextOut 调用。标题栏可能没有使用这些调用。

    至少,您应该尝试做一些会导致这种情况发生的事情,例如更改标题栏文本。


    这并不是要阻止你,而且我可能没有所有的事实,但我个人觉得忽略我的愿望的程序很烦人。如果我作为用户希望我的程序有不同颜色的标题栏,我会自己设置它们,非常感谢:-)


    而且,除此之外另一个,如果您捕获 WM_NCPAINT 消息,您要么必须自己处理整个事情(不建议),要么先调用基本版本,然后再将您的更改生效其中(老实说,由于布局变化很大,这也不可取)。

    【讨论】:

      猜你喜欢
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多