加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VC++下的GetWindowRect和GetClientRect

(2017-07-29 23:43:29)
标签:

获取坐标

vc

软件设计

分类: VC
一、GetWindowRect和GetClientRect介绍

GetWindowRect
函数功能:返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。

函数原型:
void GetWindowRect(
   LPRECT lpRect 
) const;

参数:
lpRect:指向一个CRect对象或者RECT结构指针,用来接收左上和右下角的屏幕坐标。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。
备注:复制CWnd对象的外界矩形的尺寸到指向lpRect的结构。尺寸是在屏幕坐标相对显示屏幕左上角给出的,包含已经存在的标题、边框和

滑动条尺寸。


GetClientRect
函数功能:取回客户区坐标。
函数原型:
BOOL GetClientRect( 
   LPRECT lpRect  
) const throw();
参数:
lpRect  指向一个RECT结构或一个CRet对象,用来取回客户坐标。left和top成员是0,right和bottom成员包含窗口的宽和高。
备注:复制CWnd客户区域的客户坐标到lpRect指向的结构。客户坐标指定客户区域的左上和右下角。囿于客户坐标相对CWnd客户区域的左上

角,左上角的坐标是(0,0)。

二、GetWindowRect和GetClientRect的异同

1、GetWindowRect获得的是在屏幕坐标系下的尺寸,即以屏幕左上角为原点,得到的结果可能是CRect(10,23,234,332)
GetClientRect,获得的是在客户区坐标系下的尺寸,即以所在窗口左上角为原点,得到的结果CRect(0,0,width,height)即左上角坐标(x,y)

只能是(0,0)。
2、两者得到的尺寸都包含窗口或控件的标题、滑条、边框尺寸。这也使得两者转换成为可能。

三、GetWindowRect和GetClientRect的转换

1、CWnd::ClientToScreen
需要包含头文件afxwin.h。

函数原型:
void ClientToScreen(
   LPPOINT lpPoint 
) const;
void ClientToScreen(
   LPRECT lpRect 
) const;

2、ScreenToClient
需要包含头文件afxwin.h。

结构原型:
void ScreenToClient(
   LPPOINT lpPoint 
) const;
void ScreenToClient(
   LPRECT lpRect 
) const;


附:LPPOINT结构和LPRECT结构定义
typedef struct tagPOINT
{
    LONG  x;
    LONG  y;
} POINT, *PPOINT, NEAR *NPPOINT, FAR *LPPOINT;

typedef struct tagRECT
{
    LONG    left;
    LONG    top;
    LONG    right;
    LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

四、示例
// resize dialog to client's size
void CMyDlg::OnSizeToClient()
{
   CRect myRect;
   GetClientRect(&myRect);

   ClientToScreen(myRect);
   MoveWindow(myRect.left, myRect.top,
      myRect.Width(), myRect.Height());
}

参考资料:MSDN

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有