【问题标题】:MFC Feature Pack applications have wrong size when restored to maximized in secondary monitorMFC Feature Pack 应用程序在辅助监视器中恢复为最大化时大小错误
【发布时间】:2012-05-14 11:03:19
【问题描述】:

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

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

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

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

更新:

这似乎只有在辅助显示器位于主显示器右侧时才会发生,但如果它位于左侧则不会。

【问题讨论】:

    标签: mfc mfc-feature-pack


    【解决方案1】:

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

    经过进一步研究,我发现它似乎是一个错误和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像素间隙,所以任务栏不会显示
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多