ClientToScreen 和ScreenToClient

ClientToScreen( )是把窗口坐标转换为屏幕坐标
ScreenToClient( )是把屏幕坐标转换为窗口坐标
屏幕坐标是相对于屏幕左上角的,而窗口坐标是相对于窗口用户区左上角的
VC下,有些函数使用窗口坐标,有些使用屏幕坐标,使用时要分清。


一个窗体分为两部分:系统区和客户区
象标题和菜单之类的是系统区,由系统来控制,客户区就是你的地盘喽!!!
Width, Height 是指整体的,ClientWidth, ClientHeight是指客户区的,两者相减就是
系统区的啦.
ClientToScreen是把坐标从当前窗体转化成全屏幕的!!!
ScreenToClient是把屏幕坐标转化成相对当前窗体的坐标!!!!
from:http://www.cnblogs.com/wqj1212/archive/2008/01/25/1052868.html

GetWindowRect函数或得的是控件的窗口大小,包括控件的边框等,GetClientRect获得的是控件的客户区大小,不包括控件的边框,对于不同的控件,一般来说GetWindowRect与GetClientRect取得的大小一边不一样大小。

GetClientRect是获得客户区大小。
GetWindowRect是获得窗口大小,其中包括标题栏和菜单栏工具栏等。

GetClientRect 的top left一定是0,也就是得到窗口的大小。
GetWindowRect 是窗体在整个屏幕的位置信息。top left是窗口左上角相对窗口的坐标。bottom right是右下角相对窗口的坐标.

GetClientRect只能用于窗口,不能用于控件!GetWindowRect都可以!

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

GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。    ClientToScreen把客户区坐标系下的RECT坐标转换为屏幕坐标系下的RECT坐标.  ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标.         我们对同一个窗口先GetWindowRect取得一个RECT,再用ScreenToClient转换到客户坐标系。    然后GetClientRect取得一个RECT,再用ClientToScreen转换到屏幕坐标系。    显然,GetWindowRect取得的矩阵不小于GetClientRect取得的矩阵。因为前者包含了非客户区,而后包括了客户区。     对GetWindowRect取得的矩阵ScreenToClient后,矩阵的大小没有变小,(-3,-29)是窗口的左上角的坐标,相对窗口客户区左上角。     对GetClientRect取得的矩阵ClientToScreen后,矩阵也没有变大,新得到的矩阵是窗口客户区在屏幕坐标系上的RECT。

函数   RECT    RECT左上角坐标GetWindowRect 369 274 656 465   0 0 287 191
ScreenToClient -3 -29 284 162   0 0 287 191

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>