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

时间:2011-06-17 13:06:31

标签: c++ windows

我尝试在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;
        }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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


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


而且,除了另一个之外,如果你捕获了WM_NCPAINT消息,你要么自己完成整个事情(不建议),要么先调用基本版本,然后在顶部进行更改那个(并且,老实说,由于布局的变化很大,这也是不可取的。)