怎么限制窗口的移动范围?

Hover 2003-07-28 11:30:23
怎么限制一个可移动窗口的移动范围?
...全文
149 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyxie 2003-07-28
  • 打赏
  • 举报
回复
//是星的高手啊,小弟斗胆了 :)
重载WM_MOVE
在OnMove中
{
//得到窗口的RECT
//将其转换为屏幕坐标RECT_SCERRN
IF( RECT_SCERRN在允许移动的范围内)
{
//调用默认的OnMove函数
}
else
{
//do nothing
}
}

另外,这样处理后可能还会出现这样的问题(没试过,估计会有)
移动之前还在允许移动的范围内,于是允许移动,但是移动后窗口(的某部分)出现在不允许的区域。于是我们应该将其位置“修正”
//得到移动后的窗口位置
//判断其是否超出范围,如果是,如下处理
//如果左(右,上,下)边超出允许的范围,则MoveWidnow至允许的最左(右,上,下)边

修正的时机应当是在没次处理过WM_MOVE后。(不知道CWnd有没有这样的处理函数/*小弟现在在网吧*/,如果没有可以通过自定义消息解决,在OnMove的最末Post该Message)


Hover 2003-07-28
  • 打赏
  • 举报
回复
skyxie, 处理WM_MOVE消息不行也,我早就试过.
思危 2003-07-28
  • 打赏
  • 举报
回复
楼上的朋友方法差不多,不过地方有问题,应该是WM_MOVING消息中进行处理。
偶的伴随窗体就是在这个消息中处理的。
skyxie 2003-07-28
  • 打赏
  • 举报
回复
上面的思路有点问题,OnMove中的if()判断肯定都行的,因为每次移动的时候肯定都是在允许的范围内

应该改成这样
在OnMove中
{
//得到窗口的RECT
//将其转换为屏幕坐标RECT_SCERRN
ASSERT(RECT_SCERRN在允许移动的范围内)
IF( && 不是在允许移动的边界上)
{
//调用默认的OnMove函数
}
else 在边界上
{
//do nothing
}
//在这里PostMessage修正
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧