该LPRECT
参数是一个指向RECT
结构的指针(“LP”前缀实际上代表“长指针”,出于历史原因)。
该GetWindowRect
函数将检索CWnd
对象的窗口矩形,但它会通过RECT
用这些坐标填充结构来实现。因此,您需要创建一个RECT
结构并将指向它的指针传递给GetWindowRect
函数。
值得一提的是,该 API 接受指向RECT
结构的指针以完全兼容 Win32。CRect
MFC 类实际上继承自 SDK 定义的结构,因此您可以在这里互换RECT
使用对象。CRect
这很好,因为CRect
提供了使操作矩形更容易的成员函数。
示例代码:
CWnd* pwndParent = this->GetParent();
CRect rc;
pwndParent->GetWindowRect(&rc);
// rc now contains the rectangle of your window!
请注意,该GetWindowRect
函数将返回窗口的屏幕坐标。这通常不是您想要的,除非您尝试在屏幕上重新定位窗口。屏幕坐标很难使用,因为它们是相对于整个虚拟屏幕的,在多显示器配置中可能有负坐标。此外,如果您尝试使用屏幕坐标确定窗口的大小,您将在屏幕上获得窗口的整个大小,包括其非客户区(如标题栏、最小/最大/关闭按钮, ETC。)。
相反,您通常想要的是窗口的客户端坐标,可以通过以相同方式调用GetClientRect
函数来检索。这一次,我们将使用一个RECT
结构,因为我们可以:
CWnd* pwndParent = this->GetParent();
RECT rcClient;
pwndParent->GetClientRect(&rcClient);