2011-05-13 78 views
2

我有一個現有的MFC應用程序,它在Windows 7中默認DPI(96 dpi)運行正常。但是,當我將DPI增加150%時,UI會變形。我在某些級別使用滾動條修復了問題,並提到了msdn文章。我想知道如何獲得使用MFC代碼的系統的當前DPI,以便設置對話框的高度和寬度。如何在MFC應用程序中獲取系統的當前DPI?

請建議!!

回答

13

首先,您需要獲取屏幕的設備上下文。這很容易,就像這樣調用GetDC:

HDC screen = GetDC(0); 

然後你要求設備上下文的能力。在你的情況,你所需要的沿像素每英寸的X軸和Y軸:

int dpiX = GetDeviceCaps (screen, LOGPIXELSX); 
int dpiY = GetDeviceCaps (screen, LOGPIXELSY); 

(見http://msdn.microsoft.com/en-us/library/dd144877(v=vs.85).aspx有關GetDeviceCaps更多信息)。

最後,再次釋放設備上下文:

ReleaseDC (0, screen); 
0

下面的代碼片段給了我在Win7中正確的DPI

ID2D1Factory* m_pDirect2dFactory; 
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory); 
FLOAT dpiX, dpiY; 
m_pDirect2dFactory->GetDesktopDpi(&dpiX, &dpiY); 
+0

與'GetDeviceCaps'完全相同,但僅限於Win7 +。 – NateS 2016-01-03 23:48:40

+0

不,它也適用於平臺更新的Vista SP2。 – Bob77 2016-08-14 08:04:58

相關問題