閱讀752 返回首頁    go 微軟 go windows


GetWindowRect、GetClientRect、ScreenToClient與ClientToScreen

 

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本來就是控件在對話框中的位置,如果要調整控件的位置,修改第二和第三個參數即可);

最後更新:2017-04-03 14:53:58

  上一篇:go js中insertAdjacentHTML的用法
  下一篇:go poj 2591 Set Definition【OJ實驗】