首页 > 解决方案 > 辅助监视器上的视图定位不正确,主监视器上的 MainWindow

问题描述

使用MFC,VS2017

我有一个 MFC 应用程序,主要形式来源于

CMDIFrameWndEx

然后有 5 个类型的子窗口(我已经验证了 WS_CHILD 属性已设置)

CMiniFrameWnd

每个都包含嵌入的 CFormView 或 CListView。所有这些嵌入式窗口都是通过 CreateView() 创建的。现在奇怪的是所有 5 个 CMiniFrameWnd 都位于辅助监视器上,我不知道为什么。我已经通过 GetClientRect() 检查了 5 个 CMiniFrameWnd 的 ClientRect 坐标,它们相对于 CMDIFrameWndEx 看起来很正常。我正在使用 SetWindowPos() 来定位所有 5 个。

我不明白为什么子窗口出现在辅助监视器上,因为主窗口位于主监视器上。我没有使用 MonitorFromWindow(),但我不需要,因为它在主节点上。

有什么明显的我做错了吗?

标签: c++windowsmfc

解决方案


回答最后一件事,是的,我在做一些根本错误的事情。现在问题已经解决了。

如果使用 SetWindowPos() 或 MoveWindow(),则提供的坐标必须是屏幕坐标。那是我的错误。我提供了从 GetClientRect() 获得的客户端坐标。使用 GetWindowRect() 给出屏幕坐标。这是为了在注册表中保存/恢复 Windows 位置。但是用于保存/恢复窗口位置的正确函数是 GetWindowPlacement()/SetWindowPlacement()。


推荐阅读