C++ (Win API)我无法使用WM_NCPAINT更改标题栏(非客户端区域)的颜色

C++ (Win API)我无法使用WM_NCPAINT更改标题栏(非客户端区域)的颜色,c++,windows,C++,Windows,我试图在WM_NCPAINT中设置背景色以更改标题栏的颜色,但它不会以某种方式更改。问题是,SetBkColor和SetTextColor是否对WM\u NCPAINT有效 case WM_NCPAINT: { HDC hdc = ::GetWindowDC(hwnd); ::SetTextColor(hdc,RGB(0,0,0)); ::SetBkColor(hdc,RGB(255,255,255));

我试图在WM_NCPAINT中设置背景色以更改标题栏的颜色,但它不会以某种方式更改。问题是,SetBkColor和SetTextColor是否对WM\u 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;
        }

这些函数是有效的,但您没有绘制任何内容。尝试或类似的方法。

您应该注意的第一件事是,这些功能可能会失败。您应该始终检查返回值,即使只是为了记录它们失败的事实

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

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


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



另一方面,如果您捕获WM_NCPAINT消息,您要么自己完成整个任务(不可取),要么先调用基本版本,然后再对其进行更改(老实说,由于布局的巨大变化,这也是不可取的).

如果您在vista或更高版本上执行此操作,由于新的桌面窗口管理器,它将无法正常工作。哦,你还是得画点东西!