一個簡單的列舉就可以找出系統內字型的特定語系名稱:
foreach (FontFamily f in FontFamily.Families) { Console.WriteLine(f.GetName(0) + ":" + f.GetName(0x409)); }
在尋找答案的過程, 意外的多學了幾個關於 LanguageID 的小知識, 原來 language ID 是一個 16 bit 的值, 由兩個部分組成, primary language ID 和 secondary language ID, 結構示意圖如下:
其中 Sublanguage ID 僅佔了 6 bits, 一閞始困為沒注意到所以導致計算的結果有誤, 後來仔細看才發現原來兩部份的長度是不同的, 舉個實例來說明一下:
// winnt.h // // Primary language IDs. #define LANG_CHINESE 0x04
// // Sublanguage IDs. #define SUBLANG_CHINESE_TRADITIONAL 0x01 // Chinese (Taiwan)
所以 Traditional Chinese 的 language ID 就等於 0x01 << 10 | 0x04 = 0x404
再繼續往下讀 winnt.h, 又出現了一個叫 locale ID 的東西, 順便也記一下!
keywords: font, LanguageID, localeID
沒有留言:
張貼留言