建立磁性窗体
tyle->YStyle!=AS_NONE) { // 粘贴成功 MyStyle->AttachTo= Form->Handle; } return bool(MyStyle->AttachTo); } 函数Do_WM_MOVING在消息循环中处理WM_MOVING时调用,参数My为处理消息的窗体,Msg为消息参数。 // 处理WM_MOVING事件
实现窗体的关联移动 与处理窗体粘贴相比,关联窗体的难度小一些。但是从CSDN上的帖子看,采用的方法都单调而且不佳,我都不推荐。 比较直观的方法是使用窗体的MOUSEDOWN、MOUSEMOVE和MOUSEUP事件,先定义一个标志鼠标是否按下的变量: bool bMouseDown; 在MOUSEDOWN事件中设置: bMouseDown=true; 在MOUSEUP事件中设置: bMouseDown=false; 在MOUSEMOVE事件中作如下处理:
这个方法的最明显的问题有两个:1、鼠标在窗体上的控件上按下时,不能收到窗体的MOUSEDOWN和MOUSEUP事件,如果同时监控各个控件的事件,麻烦是相当大的。2、窗口标题栏的鼠标事件难以正常处理。 其实,同上一段落类似,处理窗体的WM_MOVING事件是比较好的方法。即在WM_MOVING事件中同步移动其它窗体。 移动其它窗体的方法也有多种,有人采用发送消息的方式,具体如下: // dx和dy是当前窗体移动的距离 // hMove是要移动的窗体 // WM_MOVEFORM是自定义的消息 PostMessage(hMove, WM_MOVEFORM,dx,dy); 被移动的窗体处理WM_MOVEFORM消息时,移动自己到新的位置。 如果是VB、Delphi一类的语言,可以直接设置其Left和Top属性。我采用的方法是使用API函数SetWindowPos,该函数重新设置指定窗口的位置。我的参考代码如下: // 移动被粘贴在一起的其它窗体
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |