GetClientRect,GetWindowRect,ClientToScreen,ScreenToClient这四个函数的理解

本文详细解释了GetClientRect和GetWindowRect的功能及应用,包括如何将客户区坐标转换为屏幕坐标,反之亦然。通过示例代码展示了如何使用这些函数来调整窗口的位置和大小。

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

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

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

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

 如:

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

 void CAboutDlg::OnButton1() 

Rect myRect; 

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

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

MoveWindow(myRect.left, myRect.top, myRect.Width(), 

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

 } 

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

 例如:

 CPoint pos( ::GetMessagePos() ); //::GetMessagePos() 得到发生事件时鼠标的屏幕坐标 

ScreenToClient(&pos);//把它转换为客户区坐标以便随后在绘图时使用 ... 

使用以下代码,

可以把对话框移到刚好覆盖的地方:

 CRect rcTab; // 整个Tab 

Rect rcItem; // Tab上方的按钮

 // 取得并计算要移动的矩形框

 m_tab1.GetWindowRect(&rcTab); // 屏幕坐标 

ScreenToClient(rcTab); // 化成父窗口的客户区坐标

 m_tab1.GetItemRect(0, &rcItem); // 取得Tab上方按钮的大小 

rcTab.DeflateRect(0,rcItem.bottom+1,0,0); // 缩小Tab的矩形 // 把对话框移动到这个矩形框上 

m_Page1->MoveWindow(rcTab); // 相对于父窗口的客户区移动


补充:关于这些函数的最权威、最详细的描述,请参看MSDN。GetClientRect(),GetWindowRect()这两个函数都是CWnd类的成员函数,或称为方法(Method)。所以调用它们得到的矩形都是属于调用它们的那个CWnd对象的窗口的,如m_tab1.GetWindowRect(&rcTab); 得到的矩形rcTab就是Tab控件的窗口大小和位置(屏幕坐标系)。"它的大小就是整个窗口的大小"这句话中说的窗口就是发出GetWindowRect()调用的这个CWnd窗口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这就是编程

让我看到你的头像

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值