窗口非客户区的绘制

1.根据需要,要改变nc区的大小.
 响应WM_NCCALCSIZE可改变nc区的大小.关键在于lParam,msdn上说当wParam为True时,
 lParam为LPNCCALCSIZE_PARAMS的指定,当wParam为False时为LPRECT,做了些实验发现
 只有第一次时wParam为False,LPNCCALCSIZE_PARAMS的语义相当复杂,不过我们只用
 看第一个RECT就成.它表是窗口客户区的大小.当lParam为LPRECT时,也同样.只用改变
 客户区的大小,相应的就改变了非客户区的大小.


2.响应WM_NCPAINT绘制窗口的Title和Border


3.响应WM_NCHITTEST,在这里要做的是改变原来的HTMAXBUTTON,HTMINBUTTON,HTMINBUTTON 区域.


4.响应WM_NCACTIVATE,在这里不能调用默认的处理因为当窗口是非激活状态时会画出默认的Title


5.响应WM_ACTIVATEAPP,在这里先调用默认的处理.然后再自绘nc区.


6.响应       

        0x00AE://WM_NCUAHDRAWCAPTION
        0x00AF://WM_NCUAHDRAWFRAME
 这两条消息是在xp sp2后加的.xp在以前有个bug在某些时候Titlebar会画错.
 在这里不能调用默认处理,直接自绘nc区.


7.最后要响应WM_NCMOUSEMOVE,WM_NCLBUTTONDOWN,WM_NCLBUTTONUP,
 WM_NCMOUSELEAVE,来处理Titlebar上的鼠标动作.

另外最好调用SetWindowTheme(hWnd, L"", L""),和
DWORD dwAttr = 1;
DwmSetWindowAttribute(hWnd, 2, &dwAttr, 4));
以防止xp,和vista用主题绘制窗口nc区.
这两条函数分别是xp和vista特有的,所以只能动态加载相应的dll以调用之.
  

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值