在做一些异形窗口时,往往会响应以下NC消息:
WM_NCPAINT, WM_NCACTIVATE, WM_NCLBUTTONDOWN, WM_NCMOUSEMOVE。
但是,对于NC区的处理方式会受到系统版本及桌面主题的影响。最明显的一个例子是,
在XP和WIN7下,窗口标题栏的高度是不同的。正因为如此,采用响应NC消息进行窗口自绘是
极其麻烦。
另一种可行的方法是,将窗口的类型设置成无边框的,那么整个窗口区域都是客户区,客户区的
绘图操作完全由程序员自己控制,不会受到系统、桌面主题的影响。采用这个方法的缺点在于,
失去了标题栏的拖动功能。其实,只要响应WM_NCHITTEST,然后在适当的区域返回HTCAPTION,
就可以让窗口的某个区域具有标题栏的拖动作用。需要注意的是,如果某个区域的HITTEST返回
HTCAPTION,那么这个区域将不会收到WM_LBUTTONDOWN,WM_MOUSEMOVE。取而代之的是,
WM_NCLBUTTONDOWN, WM_NCLBUTTONUP。
PS:到目前为止我还是不会响应WM_NCLBUTTONUP。