2012-01-29 25 views
2

我正在用Gdi +繪製一些文字,並且試圖確保我創建的字體確實存在。我注意到,無論我指定什麼字體,它都能正常工作。我有以下代碼:爲什麼創建基於不存在的FontFamily的字體工作?

Font font(TEXT("SomeGibberishFOEIHSFUE"), 12, 0, UnitPoint); 

if (!font.IsAvailable()) 
    exit(0); 

// draw text 

我沒有安裝我叫SomeGibberishFOEIHSFUE系統上的字體,但IsAvailable回報TRUE和程序運行,並繪製文本,看起來像Arial字體,而不是退出的字體。爲什麼是這樣?

如果我使用IsAvailable錯誤,我應該使用什麼函數來判斷Font的創建是否成功?我也試過GetLastStatus,它返回Ok

回答

2

這是Windows字體映射器在工作,它總是會找到一個替代字體,如果它不能提供請求。如果需要,可以回到默認的GUI字體。您可以改用FontFamily類。它的.NET版本(看起來像你正在使用它)會在你使用它的構造函數並傳遞一個不存在的字體時拋出一個ArgumentException異常。它的原生GDI +版本有IsAvailable() method。是的,有點棘手的行爲,但這在GDI +中並不罕見。

+0

謝謝。 FontFamily是否創建了'Font',需要至少與'Font'一樣長,還是可以在'Font'之前銷燬?另外,我沒有使用.NET版本,我使用的是原生C++版本。 – 2012-01-29 22:34:21

+0

這裏僅用於測試字體是否存在。當您對家庭實際可用時感到高興時,它不會連接到您創建的Font實例。 Windows遵循阻力最小的路徑。你喜歡什麼樣的服務?選擇「該程序崩潰,'字體不可用'信息」。或者「它看起來不像你手冊中的屏幕截圖」。 Windows中的字體回退功能確保在後一種情況下會發生合理的事情。除非它是一個符號字體。 – 2012-01-29 23:00:45

相關問題