2015-10-06 81 views
0

在此question接受的答案的客戶區的寬度和高度,說以下有關獲取窗口的客戶區的寬度和高度:獲得一個窗口

RECT rect; 
if(GetWindowRect(hwnd, &rect)) 
{ 
    int width = rect.right - rect.left; 
    int height = rect.bottom - rect.top; 
} 

但我不明白爲什麼不只是做到以下幾點:

RECT rect; 
if(GetWindowRect(hwnd, &rect)) 
{ 
    int width = rect.right; 
    int height = rect.bottom; 
} 

由於對GetClientRect()的文檔說以下內容:

由於客戶端座標是相對於一個 窗口的客戶區的左上角,在左上角的座標是 (0,0)。

我的猜測是,這只是一個如何從RECT獲得寬度和高度的一般示例,或者我錯過了一些東西!

回答

3

你給呼叫GetWindowRect而不是GetClientRect的例子。因此返回屏幕座標而不是客戶端座標。因此,這將是錯誤的假設,左上角爲0,0。

注意因此,您目前的代碼計算的窗口的寬度和高度,而不是客戶區的寬度和高度。

如果你想在客戶區的尺寸,然後調用GetClientRect代替。而且,如您所見,返回的矩形將在左上角0,0處。

+0

對不起,我混合了這兩個函數!所以'GetClientRect()'不需要' - rect.left'和' - rect.top',對嗎? – James

+0

不。沒有。 –

+0

請注意,客戶區域本身在其邊界窗口內的左/頂位置通常不是0,0。對於窗口邊界,標題欄,菜單/工具欄等,有偏移量。如果您只需要客戶區的寬度/高度,那麼'GetClientRect()'就足夠了。但是如果你需要客戶區域的左邊/頂部在邊界窗口內,你可以使用'ClientToScreen()'在屏幕座標中獲得客戶區0,0的位置,然後從'GetWindowRect()調整任何偏移量。 –