为啥他们在 GetWindowRect 函数中使用它
Posted
技术标签:
【中文标题】为啥他们在 GetWindowRect 函数中使用它【英文标题】: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/Left
和Bottom/Right
返回到“rect”。但是为什么这段代码需要通过
rect.Width = rect.Width - rect.X;
rect.Height = rect.Height - rect.Y;
有什么意义? GetWindowRect
不是已经返回左上角和右上角的位置了吗?
他们为什么要修复它?
【问题讨论】:
只是一个糟糕的 [DllImport] 声明,使用 Rectangle 而不是 RECT。所以他们不得不在之后修复几何。 我可以说他们很懒吗? 【参考方案1】:在您的代码库中定义 Rectangle
结构的人没有遵循 C 头文件中结构上的名称。 RECT 结构有 top
、left
、bottom
和 right
成员,它们保存矩形的屏幕坐标。
您的代码通过抓取坐标然后将bottom
和right
成员重新映射为高度和宽度来“作弊”。
【讨论】:
非常感谢你,肖恩!是否与“根据 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
的值之后。
【讨论】:
我明白了,非常感谢。以上是关于为啥他们在 GetWindowRect 函数中使用它的主要内容,如果未能解决你的问题,请参考以下文章
各位高手,小弟请教关于GetWindowRect,GetClientRect以及ClientToScreen,ScreenToClient的使用!先谢谢啦
WinApi中的GetClientRect和GetWindowRect有啥区别?
为啥门控激活函数(在 Wavenet 中使用)比 ReLU 工作得更好?
GetWindowRect 在一个应用程序上返回错误值,所有其他应用程序都是正确的
C++ MFC - 在 CDialog::OnSize 事件 (GetWindowRect) 上没有引发运行时错误的代码执行失败