您的位置:首页 > 其它

关于获得对话框中子控件相对该对话框客户区的位置

2013-04-01 15:19 323 查看
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: