2017-09-06 68 views
-2

我填寫一張LOGFONT結構和使用CreateFontIndirect()創建字體和繪製一段文字,用它。這是Windows 7,所以我們不討論高動態DPI意識或任何其在Windows 10CreateFontIndirect和控制面板變焦倍率

調用設置爲100%默認縮放因子,我畫看起來不過它的外觀文本控制面板。如果我將控制面板縮放因子更改爲125%或150%,會發生什麼情況?我曾預料,在重繪/重新登錄/重新啓動後,繪製的文本看起來會稍微大一點,而不需要編程做任何事情。但事實並非如此。無論縮放係數大小如何,文本保持完全相同。我究竟做錯了什麼?

我的字體高度被硬編碼爲-7

這同樣適用於按鈕尺寸,我猜。如果我在飛行中以編程方式計算按鈕大小,並且按鈕在100%時看起來不錯,我是否應該在以125%顯示它們時進行額外的計算?他們看起來完全一樣的大小。

+1

不要描述你的代碼。顯示[MCVE]。 –

回答

1

硬編碼爲負值爲您提供:

字體映射器轉換這個值到設備單位和匹配 其對現有 字體的字符高度絕對值。

如果你看一下CreateFont的文檔,你會發現這個公式

nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72); 

和LOGPIXELSY基本上得到DPI和一英寸包含72點。如果你想要一個特定的字體大小,這是你應該使用的公式。

這是做事的經典方式,並已撒手人寰。在Vista之前,點的大小通常是8,但你應該從系統/主題API中獲得。這也是支持文章中的documented here以及更多細節。您也可以通過詢問NONCLIENTMETRICS來獲得系統使用的LOGFONT

This blog post包含了微軟不得不做修復記事本爲每監視器DPI感知信息。在對話框

UI元素應該基於對話框單位。對話單元根據字體而有所不同,但可以使用MapDialogRect轉換爲像素。

+0

是的,我已經看到了公式和文檔 - 以及使用它時產生的文本,看起來很糟糕。我不認爲它按預期工作。 – alernerdev

+0

你可以在https://msdn.microsoft.com/en-us/library/windows/desktop/dn469266(v=vs.85).aspx找到一些Win10以前的DPI文檔你可以按照他們的方式使用縮放因子它在那裏或者只是使用更大的值,如果你真的想要一個更大的字體。如果糟糕意味着模糊,那麼你並沒有將自己標記爲DPI。 – Anders