c++ - 辅助监视器上的视图定位不正确,主监视器上的 MainWindow
问题描述
使用MFC,VS2017
我有一个 MFC 应用程序,主要形式来源于
CMDIFrameWndEx
然后有 5 个类型的子窗口(我已经验证了 WS_CHILD 属性已设置)
CMiniFrameWnd
每个都包含嵌入的 CFormView 或 CListView。所有这些嵌入式窗口都是通过 CreateView() 创建的。现在奇怪的是所有 5 个 CMiniFrameWnd 都位于辅助监视器上,我不知道为什么。我已经通过 GetClientRect() 检查了 5 个 CMiniFrameWnd 的 ClientRect 坐标,它们相对于 CMDIFrameWndEx 看起来很正常。我正在使用 SetWindowPos() 来定位所有 5 个。
我不明白为什么子窗口出现在辅助监视器上,因为主窗口位于主监视器上。我没有使用 MonitorFromWindow(),但我不需要,因为它在主节点上。
有什么明显的我做错了吗?
解决方案
回答最后一件事,是的,我在做一些根本错误的事情。现在问题已经解决了。
如果使用 SetWindowPos() 或 MoveWindow(),则提供的坐标必须是屏幕坐标。那是我的错误。我提供了从 GetClientRect() 获得的客户端坐标。使用 GetWindowRect() 给出屏幕坐标。这是为了在注册表中保存/恢复 Windows 位置。但是用于保存/恢复窗口位置的正确函数是 GetWindowPlacement()/SetWindowPlacement()。
推荐阅读
- python - 如何返回字符串中最常见的字母并根据它们的频率计数对它们进行排序
- swift - 快速访问嵌套的键值对
- c++ - 一个函数来查找字符串 1 包含字符串 2 多少次 c++
- typescript - TypeScript 库类型定义
- spring-boot - 客户端收到资源后的Spring Boot回调?
- c# - C#中的Powershell
- python - 返回具有多个输入参数的函数的值以在同一类中具有多个参数的另一个函数中使用?
- javascript - 调整浏览器大小时,引导导航栏链接重叠
- python - 将数据写入 SQL Server
- scala - spark scala 读取带有行分隔符的文本文件