【问题标题】:Getting the width and height of the client area of a window获取窗口客户区的宽度和高度
【发布时间】:2015-10-06 22:41:13
【问题描述】:

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 获取宽度和高度的一般示例,或者我可能遗漏了什么!

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    您调用GetWindowRect 而不是GetClientRect 的示例。因此返回屏幕坐标而不是客户端坐标。因此,假设左上角为 0, 0 是错误的。

    因此请注意,您提供的代码计算的是窗口宽度和高度,而不是客户区宽度和高度。

    如果您想要客户区的尺寸,请致电GetClientRect。而且,正如您所观察到的,返回的矩形的左上角将位于 0, 0。

    【讨论】:

    • 抱歉,我把这两个函数混用了!所以GetClientRect() 不需要- rect.left- rect.top,对吗?
    • 请注意,客户区本身在其边界窗口内的左/上位置通常不是 0,0。有一些偏移来考虑窗口边框、标题栏、菜单/工具栏等。如果您只需要客户区的宽度/高度,GetClientRect() 就足够了。但是,如果您需要客户区的左/顶在其边界窗口内,您可以使用ClientToScreen() 获取客户区 0,0 在屏幕坐标中的位置,然后从GetWindowRect() 中减去左/顶值以进行调整任何偏移量。
    猜你喜欢
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2013-11-29
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多