MFC基于对话框的编程中有两个对话框dlg1和dlg2,通过dlg1上的一个button来打开dlg2。

请问怎么让dlg2能被鼠标拖动的范围限定在dlg1的范围内啊?... 请问怎么让dlg2能被鼠标拖动的范围限定在dlg1的范围内啊? 展开
 我来答
HarryNR
2013-03-18 · TA获得超过929个赞
知道小有建树答主
回答量:1013
采纳率:33%
帮助的人:787万
展开全部
你把dlg2设计成一个类,然后通过dlg1的按钮来实现初始化dlg2,基本操作如下:
(我之前做的,部分截取的代码,)
CLoginDlg loginDlg;//实例化一个类;
loginDlg.acceptType(LoginType);//我设计的类可以接受一个参数,然后再决定初始化界面效果,所以要是没有什么参数需要传递的话,可以不用这句。
loginDlg.DoModal();//差不多就是交给系统去显示。
至于范围的话,需要先记录onMouseClick的point,然后通过onMouseMove的即时坐标点来判断框是否出界;出界后强制赋值就好了。。。
更多追问追答
追问
我现在已经知道怎么通过dlg1的button打开dlg2,能具体讲讲dlg2的移动范围的设定吗?谢谢!!
追答
onMouseClick和onMouseMove是mfc提供的函数,自带两个参数,一般只要用point这个参数就好了。。。点下鼠标左键的话就会记录坐标值,你最好用个成员变量记住这个值,因为后面的计算要用,当然,最好用onLeftButtonDown,记录鼠标左键按下的屏幕坐标位置,通过onMouseMove的即时响应,可以一边拖动一遍计算移动的距离的。当然,point本身就是一个结构,拆开来分成point.x和point.y分别计算比较好;通过这个可以计算出鼠标拖动的距离。(到这里还是很容易理解的吧!)
之后就是dlg2创建之后,MapDialogRect(HWND hDlg,LPRECT IpRect)能返回指定对话框位置,lpRect也是个结构,有left/right/top/buttom,对应左右上下的屏幕坐标。。。然后计算就是了。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式