2011-04-12 107 views
1

我試圖用ExtTextOut功能與Courier New字體來呈現以下文字:ExtTextOut不顯示標字符

C₁C₂C²C³ 

的標字符顯示正常,但標字符顯示爲塊。如果我使用DrawText函數,則下標字符顯示正常。

我的印象是DrawText內部呼叫ExtTextOut。我錯了還是DrawText對字符串執行了一些額外的處理,以允許下標字符出現?

我有什麼辦法可以讓ExtTextOut使用Courier New字體顯示下標字符嗎?

我使用ExtTextOut代碼如下所示:

ExtTextOutW(hdc,x,y,0,0,szText,wcslen(szText),0); 

回答

2

正如Hans在評論中指出的那樣,DrawText()現在是使用字體鏈接實現的,但是看起來ExtTextOut()不是。

如果你真的想要這個工作可靠,你可能必須做自己的字體鏈接。我的一些代碼解決了類似問題:TextOutput C++ class

+0

感謝您分享您的代碼。這非常有幫助。 – flashk 2011-04-13 23:03:21

1

如果你得到的矩形,而不是字形那麼問題是您正在使用的字體。它沒有必要的字形。例如,在XP上常見,我沒有安裝它再檢查。使用Windows charmap.exe小程序來查找合適的字體。下標2是Unicode碼點'\ x2082'。

+0

我意識到這一點。選擇不同的(例如Segoe UI)將顯示下標字符。但是,爲什麼即使使用Courier New字體,DrawText函數也會顯示下標字符? DrawText函數是否執行一些額外的字體替換? – flashk 2011-04-12 23:18:25

+1

API函數可以從石器時代開始,它可能不會實現字體鏈接功能。不確定,我在很久以前沒有用過它。 Backgrounder位於:http://msdn.microsoft.com/en-us/goglobal/bb688134.aspx – 2011-04-12 23:38:59