2008-11-24 179 views
6

在Windows下獲取屏幕的DPI時(通過使用:: GetDeviceCaps),水平值是否始終與垂直相同?例如:Windows GDI:水平/垂直DPI

HDC dc = ::GetDC(NULL); 
const int xDPI = ::GetDeviceCaps(dc, LOGPIXELSX); 
const int yDPI - ::GetDeviceCaps(dc, LOGPIXELSY); 
assert(xDPI == yDPI); 
::ReleaseDC(NULL, dc); 

這些值是否有不同?

+0

自320x200顯示模式變爲過時以來就沒有了。 – 2011-08-23 18:38:31

+0

爲什麼會假設任何事情?你已經知道如何查詢兩者,爲什麼不直接查詢它們呢?你可能會面向未來的代碼,以防萬一出現這種情況,情況就會不同! – 2011-08-23 19:25:13

回答

6

它可能不同,但通常只適用於打印機。可以安全地假定屏幕始終具有相同的水平和垂直DPI。

+0

不要這樣做。我們可能不得不再次與非方形像素相抗衡。 – Joshua 2015-05-06 15:37:35

1

我從來沒有見過他們有所不同,但在this MSDN網頁我看這表明它們可能是一個註釋:

int nHorz = dc.GetDeviceCaps(LOGPIXELSX); 
    int nVert = dc.GetDeviceCaps(LOGPIXELSY); 

    // almost always the same in both directions, but sometimes not! 
0

我從來沒有見過,他們是不同的情況,但事實上有兩個單獨的要求強烈表明他們可能有時。

0

如果將顯示器設置爲使用與物理屏幕比例不同的屏幕分辨率比率,如16:9顯示器上的1600:1200等4:3分辨率,則它們很容易不同。