mfc中控件移动的问题

我想让控件在两个固定的位置来回移动,但是使用getclientrect函数时获得的左上角坐标总是(0,0),如何获得控件相对于窗口的坐标呢?... 我想让控件在两个固定的位置来回移动,但是使用getclientrect函数时获得的左上角坐标总是(0,0),如何获得控件相对于窗口的坐标呢? 展开
 我来答
yyrryyrr2
2012-06-07 · TA获得超过1120个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:445万
展开全部
没有现成的成员函数可以完成这个功能,可以用下面迂回的办法:(假设要获得一个CButton but控件的位置)
RECT rectBut;
but.GetWindowRect( &rectBut); //获取按钮控件的屏幕坐标
RECT rectParent;
(but.GetParent())->GetWindowRect( &rectParent ); //获取按钮父窗口的屏幕坐标
RECT rect; //开始计算按钮相对于父窗口的坐标
rect.left = rectBut.left - rectParent.left;
rect.right = rectBut.right - rectParent.left;
rect.top = rectBut.top - rectParent.top;
rect.bottom = rectBut.bottom - rectParent.top;

经过这段代码后,rect里面就是按钮空间相对于其所在窗口的坐标。这段代码有两点要特别注意:
1)but.GetParent()可能返回NULL,这在按钮是桌面上的按钮时发生,此时(but.GetParent())->GetWindowRect( &rectParent )将导致访问违例异常,程序会崩溃,但鉴于一般程序不会在桌面窗口上添加控件,因此不必作额外的检测。
2)这段代码获得的是按钮相对于整个父窗口的坐标,包括菜单和标题栏,而不是相对于父窗口客户区的坐标。若要获得相对于父窗口客户区的坐标则要做更多处理。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式