0

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

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

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

检查辅助显示器窗口下方的间隙

是否有任何已知的解决方法?更新版本的 MFC 是否已解决?

更新:

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

4

1 回答 1

2

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

经过进一步研究,我发现这似乎是一个错误,并且已经向微软报告

这是因为 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);
    }
}
于 2012-05-14T14:03:42.033 回答