最大化MFC对话框比监视器大

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

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

窗口最大化后发送的WM_SIZE消息显示的尺寸稍大于监视器,与切断的对话边缘部分一致。 例如,在1920 x 1080监视器上,从OnSize()最大化的大小是1936 x 1096. Spy ++显示

矩形:(-1928,-8) - (8,1088),1936×1096(最大化)

恢复的Rect:(-1188,79) - (173,849)1015 x 770

客户端:(8,50) - (1928,1088)1920 x 1038

(该对话框位于双监视器系统的左侧监视器上)。

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

有人可以解释为什么我看到我描述的结果,以及如何设置对话框,以便系统菜单的“最大化”按钮不会导致对话框扩展超过显示器的物理边界?

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


当您最大化窗口时,非客户端边框区域将移动到显示器外部。 您可以看到客户区与监视器大小减去标题栏的大小相同。

PS无法修改此行为,Windows本身在最大化时负责窗口维度。 您可能可以修改窗口以关闭WM_SIZE或其他东西上的边框,但是会丢失标题栏。

链接地址: http://www.djcxy.com/p/39241.html

上一篇: MFC dialog maximized is larger than monitor

下一篇: SetWindowTextA or SendMessageA crashes program