zoukankan      html  css  js  c++  java
  • 拖动windows窗口

    拖动windows窗口,采用自己编写WM_LButtonDown, WM_MOUSEMOVE, WM_LButtonUp来进行窗口拖动,非常麻烦也很容易出现问题。

    Windows系统本身就自带了这些消息,只是需要找到这些消息,然后发送就可以了。

    一般的Button控件是将WM_LBUTTONDOWN和WM_MOUSEMOVE以及WM_LBUTTONUP消息转换为对应的NC消息,即Non-Client消息,分别为:

    WM_NCLBUTTONDOWN, WM_NCMOUSEMOVE, WM_NCLBUTTONUP,NC部分有很多,拖动是在标题部分,因此第二个参数为HTCAPTION。系统在进行NC消息处理的时候,首先会发送WM_NCHITTEST消息,来查找当前是那个NC部分。具体代码如下(CDragButton派生自CButton):

     1 
     2 void CDragButton::OnLButtonDown(UINT nFlags, CPoint point) 
     3 {
     4     // TODO: Add your message handler code here and/or call default
     5     
     6     SendMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
     7     
     8     // CButton::OnLButtonDown(nFlags, point);
     9 }
    10 
    11 void CDragButton::OnMouseMove(UINT nFlags, CPoint point) 
    12 {
    13     // TODO: Add your message handler code here and/or call default
    14     SendMessage( WM_NCMOUSEMOVE, HTCAPTION, MAKELPARAM(point.x, point.y));
    15 
    16     // CButton::OnMouseMove(nFlags, point);
    17 }
    18 
    19 void CDragButton::OnLButtonUp(UINT nFlags, CPoint point) 
    20 {
    21     // TODO: Add your message handler code here and/or call default
    22     SendMessage( WM_NCLBUTTONUP, HTCAPTION, MAKELPARAM(point.x, point.y));    
    23     CButton::OnLButtonUp(nFlags, point);
    24 }
    25 

    但对于CStatic控件,进行上述消息发送的时候,系统并不会进行窗口拖动,CStatic毫无反应,据说是系统内部对Static控件做了一些特殊的屏蔽处理,但可以通过特殊的消息进行拖动,比上面的还要简洁些:

    1 void CDragStatic::OnLButtonDown(UINT nFlags, CPoint point) 
    2 {
    3     // TODO: Add your message handler code here and/or call default
    4     SendMessage( WM_SYSCOMMAND, 0xF0120);
    5     //SendMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
    6     // CStatic::OnLButtonDown(nFlags, point);
    7 }

    直接向系统发送WM_SYSCOMMAND, 0xF012消息,就可以准确运行了。

    要在控件中进行相关的消息处理,必须要选中控件的Notify属性。

  • 相关阅读:
    (干货).NET开发丰富的公共类库助你事半功倍(供下载免费使用)
    .NET+模块编排+数据库操作类的封装+分层架构+实体类+Ajax.net+Athem.NET+javascript+Activex组件+用户权限等
    IOS条形码扫描
    企业架构研究总结(2)——问题的由来和基本概念(转载)
    企业架构研究总结(1)——参考资料列表(转载)
    理解.NET中的异常(一)
    [转]《Java Generics and Collections》读书笔记三:协变式覆盖与泛型重载
    [转]《Java Generics and Collections》读书笔记二:子类化与通配符
    转:C++单例模式
    [转] java package import
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1699241.html
Copyright © 2011-2022 走看看