2014-03-14 56 views
0

我有一個(355,99)尺寸的對話框,它只有一個菜單和任務欄,所以它的體積很小。它的顯示在100%dpi上很好,但是在125%dpi上有一些控制任務被切斷。如何根據dpi在下列功能中縮放它們不要在mfc中改變對於windows dpi的對話框的字體?

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{ 
    CMDIFrameWnd::OnGetMinMaxInfo(lpMMI); 
    lpMMI->ptMinTrackSize = CPoint(355,99); // set minimum size 
} 
+0

很明顯,你*從不*想要硬編碼像素數量。對話框是特殊的,它們不使用像素值,而是使用對話單元。使用MapDialogRect()進行轉換。 –

+0

如何使用MapDialogRect()?你能舉個例子嗎? –

回答

0

我發現了我自己的解決方案,所以我發佈它來幫助別人。對於我的問題,我找到了系統的dpi,並相應地設置了對話框的大小。 這裏是我的代碼:

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
    { 
     CMDIFrameWnd::OnGetMinMaxInfo(lpMMI); 
     HDC hdcScreen = ::GetDC(NULL); 
     int iDPI = -1; // assume failure 
     if (hdcScreen) 
     { 
      iDPI = ::GetDeviceCaps(hdcScreen, LOGPIXELSX); 
      ::ReleaseDC(NULL, hdcScreen); 
     } 
     switch(iDPI) 
     { 
      case 96: 
       lpMMI->ptMinTrackSize = CPoint(355,99); 
       break; 
      case 120: 
       lpMMI->ptMinTrackSize = CPoint(360,115); 
       break; 
      case 144: 
      lpMMI->ptMinTrackSize = CPoint(365,134); 
      break; 
      case 196: 
      lpMMI->ptMinTrackSize = CPoint(370,150); 
      break; 
      default: 
       lpMMI->ptMinTrackSize = CPoint(355,99); 
       break; 

     } 
    }