MFC CWnd 高度和宽度

新手上路,请多包涵

如何获得 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 许可协议

阅读 1.2k
1 个回答

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);

原文由 Cody Gray 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题