GetWindowRect和GetClientRect的使用对比

来源:互联网 发布:蓝鸥unity3d培训多少钱 编辑:程序博客网 时间:2024/05/01 20:27

     今天项目中需要对屏幕坐标系和客户区坐标系进行转换,在使用以下两对函数时感到很困惑。在参考了http://www.cppblog.com/aurain/archive/2009/03/10/76126.html这篇文章之后,有点明白,但是这篇帖子后边的附图让我感到很困惑(让我认为这两对函数的处理不是可逆的),但是经过试验之后才发现这两对函数其实是一对互逆操作,测试如下:

GetClientRect(&m_rcClient);//0,0;258,80

ClientToScreen(m_rcClient);//726,536;984,616

、、、、、、、、、、、、、

GetWindowRect(&tempRect);//726,536;984,616

ScreenToClient(tempRect);//0,0;258,80

----------------------------补充说明---------------------------------------------------

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。


原创粉丝点击