在辅助监视器中恢复到最大化时,MFC Feature Pack应用程序的大小错误

时间:2012-05-14 11:03:19

标签: mfc mfc-feature-pack

我注意到,使用MFC Feature Pack(VS2008)开发的应用程序,在辅助监视器中从最小化恢复到最大化时,其大小就像它们位于主监视器中一样,为Windows任务栏留出空间。

我在我自己的程序中发现了这种行为,但在MFC Feature Pack示例中也是如此,所以我想这是MFC Feature Pack类中的一些错误。

因此,例如,我构建Visual Studio示例,运行它,将其移动到辅助监视器,在那里最大化它,最小化它,恢复它,然后我得到它:

Check the gap under the window on the secondary monitor

这有什么已知的解决方法吗?它已经解决了更新版本的MFC吗?

更新:

似乎只有当辅助监视器位于主监视器的右侧时才会发生,但如果辅助监视器位于左侧,则不会发生。

1 个答案:

答案 0 :(得分:2)

回答我自己的问题,以备将来参考:

经过进一步研究,我发现它似乎是一个错误而且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);
    }
}