你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / C专栏
建立磁性窗体(4)
 
函数Do_WM_MOVING在消息循环中处理WM_MOVING时调用,参数My为处理消息的窗体,Msg为消息参数。

  // 处理WM_MOVING事件

  void Do_WM_MOVING(TForm *My,TMessage &Msg)
   {
    CFormAttachStyle *MyStyle=(CFormAttachStyle *)My->Tag;
    if(MyStyle && MyStyle->Enabled)
    {
      MyStyle->Enabled=false; // 防止重复操作
      RECT *r=(RECT *)Msg.LParam ;
      // 处理粘贴,这里只对粘贴到主窗体进行判断
      TForm *FormApplication->MainForm;
      AttachToForm(My,r,12); // 检查是否可以粘贴窗体
      MyStyle->Enabled=true; // 恢复操作状态
    }
    Msg.Result=0; // 通知系统,消息已经处理
   }

  实现窗体的关联移动

  与处理窗体粘贴相比,关联窗体的难度小一些。但是从CSDN上的帖子看,采用的方法都单调而且不佳,我都不推荐。

  比较直观的方法是使用窗体的MOUSEDOWN、MOUSEMOVE和MOUSEUP事件,先定义一个标志鼠标是否按下的变量:

  bool bMouseDown;

  在MOUSEDOWN事件中设置:

  bMouseDown=true;

  在MOUSEUP事件中设置:

  bMouseDown=false;

  在MOUSEMOVE事件中作如下处理:

  if(bMouseDown)
   {
    // 移动当前窗体
    ……
    // 计算窗体移动的位移
    int dx;
    int dy;
    // 计算出dx和dy
    ……
    // 移动其它粘贴到当前窗体的窗体
    ……
   }

(编辑:aniston)

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089