GetClientRect相当于GetWindowRect和ScreenToClient区别
From: http://www.cnblogs.com/yongtaiyu/archive/2011/05/18/2049554.html
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。
二、
GetWindowRect 獲取的是整個window 的rect 包括標題欄 之類的周邊. 而且是屏幕坐標
GetClientRect 獲取的是客戶區, 建立一個單文檔程序運行起來后。你看到window 中白色的區域就是客戶區. 而且是客戶坐標.
ScreenToClient 這個則是把屏幕坐標轉換成客戶坐標.
比如 你的屏幕是1000*1000 大小?
你在100*100 的地方創建了一個 200*200 窗口?
那么你用GetWindowRect 取得的RECT 就應該是 top=100,left=100,right=300,bottom=300.
假如這個窗口標題欄高 10 那么 用GetClientRect 取得的RECT就應該是 top=0,left=0,right=200,bottom=190。
現在你在這個窗口上單擊了一下, 假如是屏幕是的 x=200,y=200 那么 你用ScreenToClient轉換后相對這個窗口而言x,y 就會變為
x=100, y=100
總結
以上是生活随笔為你收集整理的GetClientRect相当于GetWindowRect和ScreenToClient区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 洪水
- 下一篇: 电信运营商x86服务器定制策略