<b>成立磁性窗体</b>[VC/C++编程]
本文“<b>成立磁性窗体</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
一些闻名的同享软件不但功效卓著,并且在程序界面的计划本领上常常带领了一种时髦,WinAmp就是此中的一个代表.WinAmp有两个绝活,一是可以改换窗体的外观,也就是目前俗称的给软件换“皮肤”;另一个便是磁性窗体本领.
磁性窗体即若干窗体接近到一定距离以内时会彼此粘在一同,大概说彼此吸附在一同,然后在拖动主窗体时,粘在其上的别的窗体也一同随着移动,仿佛变成了一个窗体.国内的MP3播放器新秀CDOK也实现了这种本领,并且更绝,把几个窗体粘在一同后,窗体没有主从之分,拖动此中肆意一个窗体城市使别的的窗体一同移动.在CSDN上有关怎样计划磁性窗体的帖子非常多,阐明这个本领深得广大程序员的爱好.
本文先把几位网友的办法略加解析,然后给出我认为对比可行的实现办法和源代码.
实现磁性窗体基本上分为两步,第一步是实现当两个窗体接近到一定距离以内时实现窗体间的粘贴操作,第二步是移动窗体时,同时移动与它粘在一同的别的窗体.
实现窗体的粘贴
实现粘贴的难点在于什么时刻举行这个操作,假定有两个窗体Form1和Form2,移动Form2向Form1接近,当Form2与Form1的近来距离小于distance时粘贴在一同.明显,应当在移动Form2的历程中举行判断,问题是在程序的什么位置插入判断代码呢?
CSDN上有人认为可以利用按时器,每隔一定的时间查抄各个窗体的位置.这种办法有着明显的弊端,不说按时器要无谓地浪费系统资源,单单它的当即性就难以保证.假如缩短计时值,浪费的CPU资源就更多了,所以我也就不多说了.
公道的办法是操纵系统产生的消息,但是操纵什么消息呢?窗体在移动时会产生WM_WINDOWPOSCHANGING和WM_MOVING消息,移动完毕后会产生WM_WINDOWPOSCHANGED和WM_MOVE消息.WM_WINDOWPOSCHANGING和WM_WINDOWPOSCHANGED消息的参数lParam是构造WINDOWPOS的指针,WINDOWPOS定义以下:
以上是“<b>成立磁性窗体</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |