setwindowplacement不适用于最大化窗口

时间:2015-01-29 08:27:42

标签: c++ windows mfc

我有一个多显示器设置。当窗口在辅助监视器中最大化时,我将窗口最大化为OnSysCommand()中监视器大小的一半 通过执行以下操作:

MONITORINFO monitorInfo = { sizeof(MONITORINFO) };
GetMonitorInfo(hMonitor, &monitorInfo);
CRect rc = monitorInfo.rcMonitor;
rc.left = rc.left / 2;
SetWindowPos(hWnd, rc.left, rc.right, rc.Width(), rc.Height(),0);

这很好用。

但是,当进程停止并且在进程启动后打开窗口时,窗口最大化为完整的监视器大小,尽管窗口放置在进程退出时保存。(WindowPlacement的标志是WPF_RESTORETOMAXIMIZED,showCmd是SW_MAXIMIZE)

在OnShowWindow()中,使用了SetWindowPlacement()。

1 个答案:

答案 0 :(得分:0)

最大化始终忽略窗口放置结构内的大小。 这完全是设计上的。

窗口放置结构仅包含无最大化/普通窗口的大小。仅保存最大化窗口的左上角。这条线在屏幕坐标中支持多个终端。

如果你告诉系统恢复最大化的窗口,那么你得到了你想要的东西。

如果要限制窗口的最大化,则必须使用不同的方法。可能是WM_GETMINMAXINFO会这样做(当窗口最大化时,我不确定是否也会查询它。)