如何获得 CWnd* 的高度和宽度? CWnd 窗口是否正确?为什么不是命令:
CWnd* parent = this->GetParent(); // C++ command
parent->GetSize(); // what I think the method should be OR ...
parent->GetWindowRect(); // what i think it should be (no arguments)
这是什么LPRECT?我已经有了对象……为什么以及进入 GetWindowRect 的参数是什么?我指的是什么?我已经有了我想要找到大小的对象……只要给我大小。
原文由 Fractal 发布,翻译遵循 CC BY-SA 4.0 许可协议
LPRECT
参数是指向RECT
结构 的指针(“LP”前缀实际上代表“长指针”,出于历史原因)。GetWindowRect
函数 将检索您的CWnd
对象的窗口矩形,但它会通过使用这些坐标填充RECT
结构来实现。因此,您需要创建一个RECT
结构并将指向它的指针传递给GetWindowRect
函数。值得一提的是,该 API 接受指向
RECT
结构的指针,以完全兼容 Win32。CRect
MFC 类 实际上 继承 自 SDK 定义的RECT
结构,因此您可以在这里互换使用CRect
对象。这很好,因为CRect
提供了可以更轻松地操作矩形的成员函数。示例代码:
请注意,
GetWindowRect
函数将返回窗口的 屏幕 坐标。这通常不是您想要的,除非您尝试在屏幕上重新定位窗口。屏幕坐标很难使用,因为它们是相对于整个虚拟屏幕的,在多显示器配置中可能有负坐标。此外,如果您尝试使用屏幕坐标确定窗口的大小,您将在屏幕上获得整个窗口大小,包括其非客户区(如标题栏、最小/最大/关闭按钮, ETC。)。您通常想要的是窗口的 客户端 坐标,可以通过以相同方式调用
GetClientRect
函数 来检索。这一次,我们将使用RECT
结构,因为我们可以: