2015-10-06 71 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()调整任何偏移量。 –