c++ - 最大化的 MFC 对话框大于监视器

标签 c++ mfc multiple-monitors

在 WIndows 7 中,当我使用系统菜单的小方形按钮最大化 MFC 对话框时,生成的对话框窗口略大于屏幕的物理尺寸。这是为什么?

GetSystemMetrics 调用产生正确的显示器尺寸,屏幕分辨率(右键单击桌面)也显示正确的尺寸。

窗口最大化后发送的 WM_SIZE 消息显示的尺寸略大于显示器,与对话框的边缘部分被切掉一致。例如,在 1920 x 1080 显示器上,OnSize() 的最大尺寸为 1936 x 1096。Spy++ 显示

Rectangle: (-1928, -8) - (8, 1088), 1936 x 1096 (Maximized)

Restored Rect: (-1188, 79) - (173, 849) 1015 x 770

Client Rect: (8, 50) - (1928, 1088) 1920 x 1038

(对话框位于 2 显示器系统的左侧显示器上)。

我需要理解“最大化窗口”的确切定义,因为我正在重新排列单显示器和多显示器系统上的一些对话框窗口以响应用户更改窗口大小和/或位置。

谁能解释一下为什么我会看到我所描述的结果,以及如何设置对话框以使系统菜单的“最大化”按钮不会导致对话框扩展到显示器的物理边界之外?

MFC、64 位 Windows 7 Pro、Visual Studio 2013、C++

最佳答案

当您最大化一个窗口时,非客户边界区域被移动到显示器之外。可以看到客户区等于显示器大小减去标题栏大小。

附言无法修改此行为,Windows 本身负责最大化时的窗口尺寸。您也许可以修改窗口以关闭 WM_SIZE 或其他内容的边框,但这样您会丢失标题栏。

关于c++ - 最大化的 MFC 对话框大于监视器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131238/

相关文章:

c++ - 富文本编辑器--创建和维护项目符号列表的问题

c# - 如何在多显示器环境中轻松找到表单位置的屏幕位置?

c# - 根据屏幕宽 x 屏幕高查找显示器配置

c++ - 范围问题 : which variable would a inline function access in the following code ?

c++ - 异常处理是否需要面向对象的编程?

c++ - 更改 lParam 指向的值

c# - Screen.AllScreen 未提供正确的显示器计数

c++ - 从 C++ 程序在 Linux 上获取 SCSI 硬盘驱动器序列

c++ - Cppdepend C++ linux基础

c++ - 使用 GetFileVersionInfoSize() 时出现错误 LNK2019