回答我的问题,以供将来参考:
进一步研究后,我发现这似乎是一个错误,has already been reported to Microsoft:
这造成的事实,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);
}
}
这个解决方案有一个问题:如果Windows任务栏在自动隐藏模式下,最大化的应用程序不会留下任务栏显示鼠标悬停在其上方所需的2像素间距,因此任务栏不会显示 – MikMik