回答我自己的问题,以供将来参考:
经过进一步研究,我发现这似乎是一个错误,并且已经向微软报告:
这是因为 CFrameImpl::OnGetMinMaxInfo 使用窗口矩形来确定应该使用哪个监视器来确定最大化大小。当窗口最小化时,GetWindowRect 返回的矩形的左上角为 (-32000, -32000)。当此矩形用于确定监视器时,返回最左侧的监视器。
它说“已解决 - 它不会被修复”,所以我寻找了一种解决方法,发现这似乎有效:
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIFrameWndEx::OnSize(nType, cx, cy);
if (nType == SIZE_MAXIMIZED)
{
CRect rectWindow;
GetWindowRect(&rectWindow);
CRect rect(0, 0, 0, 0);
MONITORINFO mi;
mi.cbSize = sizeof(MONITORINFO);
if (GetMonitorInfo(MonitorFromWindow(this->m_hWnd, MONITOR_DEFAULTTONEAREST), &mi))
{
rect = mi.rcWork;
}
else
{
::SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
}
MoveWindow(rect);
}
}