2012-05-14 3 views
0

MFC 기능 팩 (VS2008)을 사용하여 개발 된 응용 프로그램이 보조 모니터에서 최소화 된 상태에서 최대 상태로 복원되었을 때 크기가 조정 된 것처럼 나타났습니다. Windows 작업 표시 줄을위한 공간을 남긴 기본 모니터.보조 모니터에서 최대화되도록 복원했을 때 MFC 기능 팩 응용 프로그램의 크기가 잘못됨

내 자신의 프로그램뿐만 아니라 MFC 기능 팩 샘플에서이 동작을 발견 했으므로 MFC 기능 팩 클래스의 버그를 추측 할 수 있습니다.

그래서, 예를 들어, 내가 비주얼 스튜디오 샘플을 빌드 , 실행 복원, 그것을 최소화, 거기 극대화, 보조 모니터로 이동, 그리고이 얻을 :

Check the gap under the window on the secondary monitor

을 이에 대한 알려진 해결 방법이 있습니까? 최신 버전의 MFC에서 해결 되었습니까?

업데이트 :

는하지만이 왼쪽에 있다면, 보조 모니터가 주 하나의 오른쪽에있는 경우에만 일어날 것으로 보인다.

답변

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