如何使用GetWindowRect函数

11

考虑以下代码:

LPRECT lpRect;
GetWindowRect(hwnd, lpRect);

我不知道如何从lpRect中获取信息,请给予建议。


1
请参见:https://dev59.com/zGTWa4cB1Zd3GeqPD396 - The Floating Brain
2
你不知道如何使用一个结构体吗?LPRECT 只是 RECT 结构体的一个指针,所以 lpRect->x 就可以访问其成员。 - Damon
1
哦,我的天哪,哇,我现在要删除这个问题,好吗?好的。 - user2662326
1
如果你想采纳一个答案,你应该选择datenwolf的回答。Michael的回答并没有真正解决你的问题(写入随机内存)。 - IInspectable
1
@GingerJack:我撤销了你的编辑,因为以下原因是不合适的:(1)它引入了一个全新的错误——malloc()传递了错误的大小(2)它与现有答案冲突(3)问题中的代码应该只被编辑以改进转发,而不是修复错误,因为错误是问题的重要部分。即使问题包含与所问问题无关的代码或问题,清理/缩减到MCVE应该只在答案中完成。 - Ben Voigt
显示剩余2条评论
3个回答

29

你写的是错误的。Windows API使用了一个丑陋的变量和类型命名约定。LPRECT代表“指向矩形的长指针”,在通常的架构中只是一个RECT*。你所写的是一个未初始化的指针变量,指向某个任意位置(如果你不幸的话,可能会导致修改时崩溃程序)。

这才是你实际需要的:

RECT rect;
GetWindowRect(hwnd, &rect);

RECT本身就是一个结构体

typedef struct _RECT {
  LONG left;
  LONG top;
  LONG right;
  LONG bottom;
} RECT;

虽然你超级牛逼,但我一开始没有尝试过,后来才吃了苦头。(我运气不好) - user2662326
我使用笔记本电脑和外接显示器。分辨率设置为1920x1080。如果我在主屏幕上运行Delphi 7程序,得到的RECTANGLE值与在次要显示器上运行程序时不同。源代码图片 - Lionking
@Lionking:可能受到HiDPI缩放的影响。检查UI缩放是否设置为100%以外的值。如果是,请将其设置为100%并重试。如果是这种情况,您还必须考虑该缩放:https://learn.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows - datenwolf

2

只是让你知道,我更喜欢你的 :O - user2662326
从技术上讲,它回答了问题,但我认为这不是用户想要的。将未初始化的指针传递给GetWindowRect是在寻找麻烦。 - Alexey Ivanov

-1

或者您可以直接在CWnd对话框中输入以下内容:

CRect rect;
this->GetWindowRect( &rect );

зӯ”жЎҲ并没жңүжҸҗдҫӣе…ідәҺCRectжҲ–иҖ…жҳҜthis->GetWindowRectзҡ„йўқеӨ–дёҠдёӢж–ҮдҝЎжҒҜгҖӮжҲ‘зҢңжөӢиҝҷдёҺMFCжңүе…іпјҢдҪҶе®ғ并没жңүеӣһзӯ”еҺҹй—®йўҳгҖӮ - Alexey Ivanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接