2012-05-14 20 views
0

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

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

因此,举例来说,我建立在Visual Studio示例,运行它,将它移动到辅助监视器,最大限度地提高它在那里,最小化,还原它,我得到这个:

Check the gap under the window on the secondary monitor

有没有已知的解决方法?它是否解决了更新版本的MFC?

UPDATE:

它似乎只发生,如果辅助监视器是在主之一的权利,但如果它的左边。

回答

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); 
    } 
} 
+0

这个解决方案有一个问题:如果Windows任务栏在自动隐藏模式下,最大化的应用程序不会留下任务栏显示鼠标悬停在其上方所需的2像素间距,因此任务栏不会显示 – MikMik

相关问题