MFC已经实现button自由拖动,怎么实现拖动到另一个上面的时候位置交换
展开全部
没看到你的实现方式代码,没法给出合理的改进代码。
交换位置,这里涉及两步。
第一是判断是否交换。这里就需要遍历窗口内所有按钮(这个要根据实际情况做),如果: 状态为拖动&&鼠标在其中一个控件的WindowRect里面&&这个控件不是被拖动控件, 则:记录两个控件指针,触发交换事件。
第二是交换的实现,位置的交换很简单,两个控件分别GetWindowRect获取两个位置,之后根据这两个位置互相MoveWindow就可以了。
交换位置,这里涉及两步。
第一是判断是否交换。这里就需要遍历窗口内所有按钮(这个要根据实际情况做),如果: 状态为拖动&&鼠标在其中一个控件的WindowRect里面&&这个控件不是被拖动控件, 则:记录两个控件指针,触发交换事件。
第二是交换的实现,位置的交换很简单,两个控件分别GetWindowRect获取两个位置,之后根据这两个位置互相MoveWindow就可以了。
追问
代码私信发给您了,能帮忙看一下怎么改么,上面说的好像没有实现在具体位置的位置交换就像图片的效果。图片效果不行的话简单交换也行。
追答
你的代码中,按钮移动的代码已经很完整了。
因为看不到完整逻辑,
case WM_LBUTTONUP:
ReleaseCapture();
return bDrag;
之后是否有什么动作不清楚。你可以根据实际情况来确定,这里第一个控件是否产生了实际移动(覆盖效果),如果有,你只需要通过记录的WndowArray遍历一下,根据两个鼠标坐标点做交换就可以了。其实核心逻辑都是GetWindowRect和MoveWindow。但,
由于这个是已经封装好的代码,应该有完整的封装逻辑,这个在没有完整浏览代码并实际测试的情况下,很难给你准确的建议(因为个人习惯不同,封装逻辑和操作逻辑也不同),这个是比较特殊的封装逻辑,应该还有其它方法和操作在里面,建议你还是先看看这个封装的例子和说明文档,没有完整看过和用过的人,给你的建议很难完全合适。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询