GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。

GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。  
用GetClientRect返回的RECT结构上左为零, 右下分别对应客户区的宽度和高度;

ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标.     
我们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。
然后GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。
显然,GetWindowRect取得的矩阵不小于GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。   

对GetWindowRect取得的矩阵ScreenToClient后,矩阵的大小没有变小,left,top是窗口的左上角的坐标,相对窗口客户区左上角。   

对GetClientRect取得的矩阵ClientToScreen后,矩阵的大小也没有变大,新得到的矩阵是窗口客户区在屏幕坐标系上的RECT。

---------------------------

例:

获取某控件相对于对话框的位置:

CRect rt;
GetDlgItem(IDC_CB)->GetWindowRect(rt);  //取得在屏幕中的位置
ScreenToClient(rt);         //转换到在对话框中的位置
rt.left和rt.top为该控件在对话框中的位置;
GetDlgItem(IDC_CB)->SetWindowPos(NULL,rt.left,rt.top,0,0,SWP_NOSIZE);//设置该位置(其实还是在原位置,因为rt.left和rt.top本来就是控件在对话框中的位置,如果要调整控件的位置,修改第二和第三个参数即可

窗口的左上角坐标o(left,top)右下角坐标o(rightk,bottom)

width = right - left;

hight = bottom - top

CRET wr,cr;

pFrame->GetWindowRect(&wr);//pFrame是一个窗口的指针
   pFrame->GetClientRect(&cr)

其中距形大小 wr(包括客户区和非客户区)>cr(仅包括客户区)

CDialog也遵循以上规律(CDialog也是窗口)

【原网址】:http://bbs.xml.org.cn/blog/more.asp?name=oceanblue&id=44420

VC:GetWindowRect、GetClientRect、ScreenToClient与ClientToScreen的更多相关文章

  1. GetWindowRect() GetClientRect() ScreenToClient() MoveWindow()

    CWnd.GetWindowRect 参照坐标系:屏幕坐标系,原点为屏幕左上角(0,0)的位置 功能:取得调用窗口CWnd在屏幕坐标系下的RECT坐标 CWnd.GetClientRect 参照坐标系 ...

  2. GetWindowRect、GetClientRect、ScreenToClient与ClientToScreen

    GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置. GetClientRect取得窗口客户区(不包括非客 ...

  3. GetWindowRect与GetClientRect 的区别

    GetWindowRect 函数功能:该函数返回指定窗口的边框矩形的尺寸.该尺寸以相对于屏幕坐标左上角的屏幕坐标给出. 函数原型:BOOL GetWindowRect(HWND hWnd,LPRECT ...

  4. DPtoLP/LPtoDP 和 ScreenToClient/ClientToScreen

    设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标.通常将屏幕上的设备坐标称为屏幕坐标.设备坐标用对象距离窗口左上角的水平距离 ...

  5. VC++学习之GDI概述

    VC++学习之GDI概述 图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏 ...

  6. VC 绘图,使用双缓冲技术实现

    VC 绘图,使用双缓冲技术实现 - Cloud-Datacenter-Renewable Energy-Big Data-Model - 博客频道 - CSDN.NET VC 绘图,使用双缓冲技术实现 ...

  7. VC++ 坐标问题总结,控件大小随窗口变化

    [出处:blog.csdn.net/lanmanck] 一般变控件位置和大小在OnSize()消息中处理,不外乎几个函数: GetClientRect(),GetClientRect(),Screen ...

  8. VC实现卡拉OK字幕叠加

    一. GDI编程基础 字幕叠加,应当是属于图形.图像处理的范畴.在Windows平台上,图形.图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口).GDI是 ...

  9. 积累的VC编程小技巧之工具条和状态条

    1.工具条和状态条中控件的添加: 方法⑴.只能在ToolBar里创建控件:首先,在ToolBar中创建一个Button,其ID为ID_TOOL_COMBO(我们要将创建的控件放在该Button的位置上 ...

随机推荐

  1. cisco 三层交换机通信

    前言 之前学了交换机和路由器今次学三层交换机的通信. 正文 准备:cisco模拟器 一台三层交换机 两台PC 配置命令如下 enable config t vlan 10 exit vlan 20 e ...

  2. jquery easy ui 的formatter 格式化函数代码

  3. python开发_python概述

    Python(KK 英语发音:/ˈpaɪθən/,是一种面向对象.直译式计算机程序设计语言, 由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. Python语法 ...

  4. Java语言主要特点有哪些?

    1.简单 Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了.Java语言的简单性主要体现在以下三个方面: 1) Java的风格类似于C++,因而C++程序员是非常熟悉的.从某 ...

  5. GeoServer之图层的新建与发布

    GeoServer之图层的新建与发布 GeoServer的图层发布并不复杂,在经过: 1.创建工作区 2.添加新的数据存储 3.编写styles 后:我们就可以很简单的创建图层了. 1.在新建图层中选 ...

  6. C# WinForm启动时的事件加载次序

  7. 一分钟学会 ConstraintLayout 之从属性角度理解布局

    ConstraintLayout 在 Android 开发中,我们通常是手写布局,很少会用拖动来写布局,虽然 ConstraintLayout 在 I/O 上以拖动来展现了各种功能,我估计在以后开发中 ...

  8. Can only modify an image if it contains a bitmap

    Can only modify an image if it contains a bitmap Image1装载了JPG文件后下面都报错,因为. Image1.Canvas.CopyRect(dre ...

  9. xUtils怎么post请求上传字符串

    xUtils算是一个非常实用老牌的框架了,但是有些情况,特别是网络请求部分,总是不太方便.需要折腾下才了解用法.今天来聊聊网络模块的用法. 其实看例子就明白了,post JSON数据也是一样道理,这里 ...

  10. android 积累

    图片资源 图片资源是简单的Drawable资源,目前Android支持的图片格式有:gif.png.jpg等.我们只需要把图片资源放置到\res\drawable目中,那么在编译后的R.java类中就 ...