你如何获得 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 的参数是什么?我指的是什么?我已经有了我想要找到大小的对象......只需给我大小。

最佳答案

LPRECT 参数是一个指向 RECT structure 的指针(出于历史原因,“LP”前缀实际上代表“长指针”)。

GetWindowRect function 将检索 CWnd 对象的窗口矩形,但它会通过用这些坐标填充 RECT 结构来实现。因此,您需要创建一个 RECT 结构并将指向它的指针传递给 GetWindowRect 函数。

值得一提的是,该 API 接受一个指向 RECT 结构的指针,以便与 Win32 完全兼容。 CRect MFC class 实际上继承自 SDK 定义的 RECT 结构,因此您可以在这里互换使用 CRect 对象。这很好,因为 CRect 提供了可以更轻松地操作矩形的成员函数。

示例代码:

CWnd* pwndParent = this->GetParent();

CRect rc;
pwndParent->GetWindowRect(&rc);

// rc now contains the rectangle of your window!

请注意, GetWindowRect 函数将返回窗口的屏幕坐标。这通常不是您想要的,除非您尝试在屏幕上重新定位窗口。屏幕坐标很难处理,因为它们是相对于整个虚拟屏幕的,在多显示器配置中可能有负坐标。此外,如果您尝试使用其屏幕坐标确定窗口的大小,您将在屏幕上获得窗口的整个大小,包括其非客户区域(如标题栏、最小/最大/关闭按钮) , 等等。)。

您通常需要的是窗口的客户端坐标,可以通过以相同的方式调用 GetClientRect function 来检索。这一次,我们将使用 RECT 结构,因为我们可以:
CWnd* pwndParent = this->GetParent();

RECT rcClient;
pwndParent->GetClientRect(&rcClient);

关于c++ - MFC CWnd 高度和宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35204826/

10-11 19:19