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

时间:2015-03-18 19:38:24

标签: c++ mfc multiple-monitors

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

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

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

  

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

     

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

     

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

P.S。无法修改此行为,Windows本身在最大化时负责窗口尺寸。您可以修改窗口以关闭WM_SIZE上的边框或其他内容,但之后您将丢失标题栏。