假設您有一個帶有兩個或更多腳本文本的字符串。當您使用GDI功能(如TextOut
)時,Windows的(現代版本)將執行「字體鏈接」。也就是說,GDI會使用您選擇的字體繪製其中的內容,並使用自動選擇的適當字體繪製其餘字體。例如,如果部分文本是英文的(使用羅馬字母),部分文本是中文(使用CJK字符),並且選擇了Arial,則英文部分將以Arial繪製,而中文部分將會用另一種具有CJK字形的字體繪製。是否可以確定Windows爲字體鏈接選擇的字體?
我的問題是,有沒有辦法確定哪些字體TextOut
將選擇(或選擇)的字體鏈接?
我不得不用低級別的Uniscribe API來繪製一些文字,它不會自動進行字體鏈接。我已經實現了自己的字體鏈接,但是有時我的算法會選擇與TextOut
不同的字體。我試圖更好地理解Windows算法,但我並不擅長識別視覺上的字體(特別是在不熟悉的腳本中)。
謝謝,這是一個很好的資源。但是我在另一篇博客中讀到,那些註冊表鍵只是爲了向後兼容,並且它們不再真正驅動字體鏈接。例如,在我的機器上,TextOut將爲不在註冊表中的基本字體進行字體鏈接。而且它也不是字體回退,因爲爲其他腳本選擇的字體根據基本字體而不同。 – 2010-03-11 19:00:09
查看IMLangFontLink:http://msdn.microsoft.com/en-us/library/aa767872%28v=VS.85%29.aspx – 2010-03-11 19:13:41
我在前面的迭代中使用了IMLangFontLink2,但是當我混合LTR腳本時它引發了問題與RTL腳本。我認爲這是一個非常古老的解決方案,它可能仍然是爲了向後兼容。 – 2010-03-11 21:45:35