• 拖动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属性。

  • 相关阅读:
    UML-如何画操作契约?
    UML-操作契约是什么?
    UML-SSD总结
    UML-如何画SSD?
    UML-SSD-为什么要画SSD?
    UML-SSD-定义
    系统幂等性设计
    UML-领域模型-例子与总结
    UML-领域模型-属性
    UML-领域模型-添加关联和属性
  • 原文地址:https://www.cnblogs.com/ubunoon/p/1699241.html
Copyright © 2020-2023  润新知