Client Window坐标

GetClientRect(HWND, RECT*) ---得到窗口的客户区大小,left,top总是0,bottom是客户区高度,right是客户区宽度

GetWindowRect(HWND, RECT*) ---得到窗口相对屏幕左上角(0,0)的坐标,即窗口左上角(left,top)和右下角(right,bottom)的坐标



ScreenToClient(HWND, POINT*) ---将一屏幕坐标转为相对于窗口客户区左上角的坐标。假设客户区屏幕坐标(110,120,400,400)
                                                       若p(100,100),则转换后p(-10, -20)
                                                       若p(150,150),则转换后p(40, 30)

ClientToScreen(HWND, POINT*) ---将一相对于窗口客户区左上角(始终假设)的坐标转为屏幕坐标。假设客户区屏幕坐标(110,120,400,400)
                                                       若p(5, 5),则转换后p(115,125)
                                                       若p(10, -20),则转换后p(120,100);

Windows并没有提供直接转换客户区RECT坐标/屏幕RECT坐标的函数,但是MFC中的CWindow类提供了ClientToScreen(RECT*) 和 ScreenToClient(RECT*)函数。
比如,当使用ClientToScreen(RECT *prc)时,传入的RECT坐标是假定为相对客户区左上角的,假设客户区屏幕坐标(110,120,400,400)
                                                若rc(2,2,4,4),则转换后rc(112,122,114,124)
                                                若rc(-5,-5,0,0),则转换后rc(105,115,110,120)
                                                若rc(0,0,290,280),则转换后rc(110,120,400,400)  >--->------->------->此例常用来获取客户区相对屏幕原点的坐标:

RECT rcClient;
GetClientRect(&rcClient); //0 0 宽 高
ClientToScreen(&rcClient); //客户区左上点和右下点的屏幕坐标
/*很常用,但不要误认为ClientToScreen的作用仅限于此*/

同理,当使用ScreenToClient(RECT *prc)时,传入的RECT坐标假定为屏幕坐标,假设客户区屏幕坐标(110,120,400,400)
                                                若rc(150,150,160,160),则转换后rc(40,30,50,40)
                                                若rc(100,100,120,120),则转换后rc(-10,-20,10,0)
                                                若rc(110,120,400,400),则转换后rc(0,0,290,280)



OffsetRect(RECT*, int dx, int dy)  ---移动矩形,从感官上:dx为正,右移,为负,则左移;dy为正,下移,为负,上移。若rc(100,100,150,150)
                                                         dx=0,dy=1,则转换后rc(100,101,150,151)
                                                         dx=-50,dy=-10,则转换后rc(50,90,100,140)
  使用1:将窗口相对屏幕坐标转为相对窗口左上角坐标(即0 0 宽 高)

RECT rc;
::GetWindowRect(hwnd,  &rc);
::OffsetRect(&rc, -rc.left, -rc.top);
/*当然也可以
rc.right -= rc.left;
rc.bottom -= rc.top;
rc.left = rc.top = 0;
*/

  使用2:计算客户区相对窗口左上角的坐标

//MFC下
RECT rc, rcClient;

GetWindowRect(&rc);//窗口的屏幕坐标

GetClientRect(&rcClient);
ClientToScreen(&rcClient);//客户区的屏幕坐标

::OffsetRect(&rcClient, -rc.left, -rc.top);//客户区相对与窗口左上角的坐标

 

时间: 2024-10-06 07:52:04

Client Window坐标的相关文章

VNCServer,SSH Secure Shell Client,window远程控制linux

1.VNC远程连接linux图形化桌面 2.SSH Secure Shell Client连接linux终端 3.设置FTP与linux传输文件 1.VNC远程连接linux图形化桌面 在centos下运行: yum -y instll vnc vnc-server 运行完后,rpm -q vncserver 却提示:package vncserver is not installed ,不知道什么原因,yum search vnc 发现有好几种版本,选择运行 yum install tiger

RHEL6-X Window System-2.组件

组件包括: X Server X Client Window manager Display manager X Window System是个利用网络架构的图形用户界面的软件,那到底这个架构可以分成多少个组件呢? 基本上分成X server与X client两个组件 X Server:硬件管理.屏幕绘制与提供字体功能(XFree86计划及Xorg基金会主要提供的就是这个X Server) X Client:即应用程序,负责X Server要求的"事件"处理,提供绘图数据给X Serv

Note For Linux By Jes(18)-X Window 配置介绍

什么是XWindow System: 主要组件:X Server/X Client/Window Manager/Display Manager X Server:硬件管理.萤幕绘制与提供字型功能: X Client:负责X Server 要求的『事件』之处理: X Window Manager:特殊的X Client ,负责管理所有的X client 软件 Display Manager:提供登陆需求 X Window 的启动流程: 在文字介面启动X :透过startx 命令 由startx

Qt中的viewport与window

前提:讲述QPainter绘制.无其他变换. viewport默认是整个paint device窗口,对QWidget来说就是整个QWidget窗口. window永远是与viewport全等的矩形. setViewport的作用是在paint device上圈定一个矩形(以device坐标),用来作为window的参照.除了作为window的参照,viewport这个概念基本上没什么作 用.那viewport作为window的参照是什么意思呢?刚才说了,window永远与viewport全等,

X Window 程式设计

X Window 程式设计 转   http://www.cppblog.com/zmj/archive/2007/05/18/24331.html X Window 程式设计 X Window 程式设计入门 http://cnpa.yzu.edu.tw/~thinker 作者:李圭烽 (Thinker; [email protected]) (2001-06-01 17:04:00) -------------------------------------------------------

Window Classes

每一个窗口类都有一个相关联的窗口过程,这个窗口过程是被同一个类的所有窗口所共享.窗口过程处理这个类的所有窗口的消息从而控制他们的行为和外观. 进程必须注册一个窗口类后才能创建一个窗口.注册窗口类用一个类名字关联到窗口过程,类风格,以及其他的类属性.当进程在CreateWindow或者CreateWindowEx中指定了一个类名的时候,系统就会创建一个窗口,其中窗口过程,风格,其他属性跟这个类名相关联. 窗口类的类型 系统类 应用程序全局类 应用程序局部类 How the System Locat

emWin 2天速成实例教程003_Framewin和Window窗口控件和2D绘图

备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果.(2)看完教程000-005就基本会用emWin做项目,其他章节可以需要时再参考. (1) emWin的每个界面都需要一个Framewin/Window窗口控件作为父窗体,就好像Framewin/Window是一个窗体框架,所有控件都放置在这个框架当中,组成父窗体和子控件的连带关系,可以通过父窗体找到子控件,也可以通过子控件找到它的父窗体,Framewin和Window在外观上是有区别的:

delphi控件属性和事件

常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大小 BiDiMode:(所有组件) 为从右向左写的语言提供支持 BoundsRect:定义组件边框矩形(只适用于运行时) Borderwidth:(窗口化组件)边框的宽度 BorberStyle:设置组件边框形状(样式) Brush:可确定组件的风格和颜色 Caption:使用该属性可指定标注组件的

[深入理解Android卷一全文-第八章]深入理解Surface系统

由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版.而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. 第8章  深入理解Surface系统 本章主要内容 ·  具体分析一个Activity的显示过程. ·  具体分析Surface. ·  具体分析SurfaceFlinger. 本章涉及的源代码文件名称及位置: · ActivityThread.java framework/base/core/java/an