关于ClientToScreen、ScreenToClient、GetClientRect和GetWindowRect四个函数之间的关系

本文详细介绍了GetClientRect、GetWindowRect、ClientToScreen及ScreenToClient等函数的使用方法,阐述了它们在坐标转换中的作用,并分享了在对话框拉伸过程中保持控件布局不变的经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 对于这四个函数,想必有部分人还不知道其真正的原理吧.今天我也着实总结下:

GetClientRectGetWindowsRect两者之间的关系:

GetClientRectCRect是相对它的窗口的客户区的原点而言的,即它的左上角坐标总是(0,0),大小总是客户区的长宽。

GetWindowRect得到的CRect则是相对于屏幕坐标而言的,它的左上角坐标就是窗口在屏幕上的左上角坐标,它的大小就是整个窗口的大小。 

ClientToScreenScreenToClient两者之间的关系:

ClientToScreen,可以把一个CPoint对象或CRect对象的坐标从客户区坐标系(以客户区左上角为原点)变换为屏幕坐标系(以屏幕左上角为原点)。 

如:

// 把对话框的大小变成客户区的大小 

void CAboutDlg::OnButton1() 

//1.通话GetClientRect来获取窗体的矩形区域

CRect myRect; 

GetClientRect(&myRect);//取得客户区的大小 

ClientToScreen(myRect);//转换为屏幕坐标 

MoveWindow(myRect.left, myRect.top, 

myRect.Width(), myRect.Height());//MoveWindow使用的是屏幕坐标 

}

ScreenToClient,则可以把一个CPoint对象或CRect对象的坐标从屏幕坐标系变换为客户区坐标系。 

例如: 

CPoint pos( ::GetMessagePos() ); //::GetMessagePos() 得到发生事件时鼠标屏幕坐标 ScreenToClient(&pos);//把它转换为客户区坐标以便随后在绘图时使用 

 

另外,我们经常需要对对话框进行拉伸.在其拉伸的过程中总会牵涉到一些控制的摆放问题,这里我给出我的一点经验:

首先使用以下语句就可以得到控件相对于客户端的位置(这个位置前面已经说得很清楚了)

m_value.GetWindowRect(LPRECT);//获取窗体的矩形区域
ScreenToClient(LPRECT);//从屏幕转为客户端

m_value.MoveWindow(LPRECT);

在获取对话框的大小.计算一下控件距对话框的某一边的长宽度.

每当对话框拉伸的话,在onSize里面将控件的相对于对话框的大小调解下.(这里主要注意不变量,一般是控件的大小不变,只改变位置).

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值