设置窗口放置不适用于最大化窗口

setwindowplacement doesn't work for maximized window

本文关键字:窗口 适用于 最大化 不适用 设置      更新时间:2023-10-16

我有一个多显示器设置。当窗口在辅助监视器中最大化时,我在 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()。

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

窗口

放置结构仅包含无最大化/普通窗口的大小。仅保存最大化窗口的左上角。并且此线位于屏幕坐标中,以支持多个端子。

所以你得到你想要的,如果你告诉系统恢复窗口最大化。

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