关于获得对话框中子控件相对该对话框客户区的位置
发布日期:2022-01-31 02:37:32 浏览次数:31 分类:技术文章

本文共 683 字,大约阅读时间需要 2 分钟。

CRect rc;	CWnd* pwnd = GetDlgItem(IDC_PIC);	pwnd->GetClientRect(&rc);	pwnd->MapWindowPoints(this,&rc);
前段时间,要实现鼠标点选指定点坐标值功能,由于MFC中鼠标事件(滑动或者单击)中,返回的point的值,其值的坐标原点是响应该事件的窗口的客户区(即不包括标题栏,也就是该对话框窗口的名字(不是ID号))

所以,子控件的位置最好也是基于同样原点。

有两种实现方式:

CRect rc;	CWnd* pwnd = GetDlgItem(IDC_PIC);	pwnd->GetClientRect(&rc);	pwnd->MapWindowPoints(this,&rc);
上述代码中,IDC_PIC是子控件的ID号,this表示转换到父窗口的坐标系(具体点就是以这个父窗口的客户区左上角为原点的坐标系)

注意这里一定要用

pwnd->GetClientRect(&rc);

方法2:
CRect rc;	CWnd* pwnd = GetDlgItem(IDC_PIC);	pwnd->GetWindowRect(&rc);		ScreenToClient(&rc);//或者this->ScreenToClient(&rc) 其实,this表示就是当前的父窗口
ScreenToClient(&rc)表示将rc由电脑屏幕坐标系转换到窗口坐标系(具体点就是以窗口的客户区左上角为原点的坐标系)
注意:这里一定要用
pwnd->GetWindowRect(&rc);

转载地址:https://blog.csdn.net/LJH0600301217/article/details/8746641 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:屏幕坐标系和窗口客户区坐标系最明显的区别
下一篇:关于ofstream乱码的问题及其强制类型转化

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月20日 09时35分39秒