【问题标题】:why they use this in GetWindowRect function为什么他们在 GetWindowRect 函数中使用它
【发布时间】:2021-01-23 09:44:39
【问题描述】:
        // Get the size of the window to capture
        Rectangle rect = new Rectangle();
        GetWindowRect(handle, ref rect);

        // GetWindowRect returns Top/Left and Bottom/Right, so fix it
        rect.Width = rect.Width - rect.X;
        rect.Height = rect.Height - rect.Y;

我的英语不是很好,但我对 C# 编码很感兴趣,如果我发布了一个愚蠢的问题,请见谅。 无论如何,我读到了GetWindowRect(handle, ref rect);,我知道这个函数会将句柄的Top/LeftBottom/Right 返回到“rect”。但是为什么这段代码需要通过

来解决问题
    rect.Width = rect.Width - rect.X;
    
    rect.Height = rect.Height - rect.Y;
  • 有什么意义? GetWindowRect 不是已经返回左上角和右上角的位置了吗?

  • 他们为什么要修复它?

【问题讨论】:

  • 只是一个糟糕的 [DllImport] 声明,使用 Rectangle 而不是 RECT。所以他们不得不在之后修复几何。
  • 我可以说他们很懒吗?

标签: c# windows winapi


【解决方案1】:

在您的代码库中定义 Rectangle 结构的人没有遵循 C 头文件中结构上的名称。 RECT 结构有 topleftbottomright 成员,它们保存矩形的屏幕坐标。

您的代码通过抓取坐标然后将bottomright 成员重新映射为高度和宽度来“作弊”。

【讨论】:

  • 非常感谢你,肖恩!是否与“根据 RECT 结构的约定,返回的矩形的右下角坐标是排他的。换句话说,(右,下)处的像素位于矩形之外。”
  • 哦,我明白了。再次感谢肖恩。在我读了你的帖子2-3次之后。我解决了我的好奇心。这对我来说意义重大。因为你我更聪明了谢谢xD
  • @Sean - Whoever defined the Rectangle structure in your codebase - 讽刺?还是一样的 Midrosoft:docs.microsoft.com/en-us/dotnet/api/… :)
【解决方案2】:

我不清楚你在问什么,但是 可以找到API信息here

你会发现GetWindowRect 只返回boolean 而不是RECT

但是,它写入第二个参数以设置RECT 结构。

在他们最终修改从GetWindowrect()获得的rect的值之后。

【讨论】:

  • 我明白了,非常感谢。
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多