2016-05-03 28 views
3

畫在Windows CE 6,我使用AddFontResource()至(宋體的Unicode MS,版本1.0.1)加載ARIALUNI.TTF到系統的字體列表,並支持我們所有的當文本使用字體繪製到屏幕時,遠東語言(日文,韓文,簡體和繁體中文)顯示正確。遠東語言文本無法在Windows Compact 7的

同樣的技術也不會產生在Windows 7精簡屏幕上遠東字符我得到空箱,而不是出現在屏幕上的實際字符,這是我見過當字體不支持必要的字符組。

我對兩個平臺以及相同的字體文件使用相同的代碼。我已經通過代碼進行了調試,以驗證 a)操作系統聲稱該字體實際上是通過AddFontResource()加載到系統字體列表中的, b)操作系統聲稱在實際繪製之前字體會加載到屏幕設備上下文中文本和 c)實際的遠東字符在我交給DrawText()的緩衝區中。 這與CE6下的工作完全相同。

有什麼奇怪的是,我們支持的東部歐洲語言(俄語,捷克語,保加利亞)在Windows上正確顯示Compact 7的我是否無法加載ARIALUNI.TTF。註冊表說默認的系統字體是Tahoma,但我不認爲Tahoma支持基本的西歐語言以外的其他任何東西。它不在CE6下。

我寧可不添加或使用其他字體。 Arialuni.ttf幾乎支持我們可能支持的所有語言,並且它已經是我們用於非西歐語言的唯一語言。

目前已經安裝了其他幾個True-Type字體,因此該選項(而不是光柵字體)已經在我們的操作系統版本。

  1. 這是arialuni.ttf與Windows Compact 7兼容嗎?
  2. 有沒有必要在操作系統映像中添加對遠東語言的支持以使此類字體加載和文本繪圖有效?
  3. 我錯了Tahoma,它現在支持東歐語言嗎?
  4. 我錯過了什麼?

感謝您的任何和所有的想法。

+0

你用什麼來建立你的應用程序?你使用什麼編程語言?你在運行你的應用程序?我知道Windows CE默認使用Unicode。是否有可能需要在Windows Compact 7的項目中定義UNICODE? –

+0

我們已經在CE 6上成功使用了Visual Studio 2008,並繼續在Compact 7上成功使用它。雖然我們有一些C#組件,但有問題的是C++可執行文件。我們一直以Unicode支持爲基礎,以挑選俄羅斯,保加利亞,捷克,日本,韓國和中國(傳統和簡體)等非西歐語言的外語支持。如上所述,只有遠東語言不能正確繪製,我不明白爲什麼。 – gozer61

回答

2
  1. 這個版本ARIALUNI.TTF確實是兼容Windows 7緊湊

  2. 不清楚。有些OS映像允許CE6下的字體映射器正確映射我們的請求,但不能映射到CE7下。

  3. 號建成CE7默認tahoma.ttf不支持東部歐洲字符集而不是遠東字符集。

  4. 我們的程序調用CreateFontIndirect()獲取GDI字體資源的句柄,我們可以在屏幕上繪製文本時選擇屏幕的設備上下文。這個調用使用一個LOGFONT結構,我們用我們想要的字體的屬性填充,在幕後,系統的字體映射器組件查看它所知道的字體並返回它認爲最匹配的字體。

    最初,我們只指定了字符高度,重量和字體名稱。默認情況下,請求的字符集是ANSI_CHARSET(0)。這總是讓我們在我們的CE6平臺上參考arialuni.ttf字體。不過,在我們的CE7平臺上,字體映射器將請求映射到tahoma.ttf文件。

    我修改了LOGFONT結構內容以包含詢問日文字符集(LOGFONT.lfCharSet = SHIFTJIS_CHARSET)。在這兩個平臺上,只有arialuni.ttf字體文件支持這種語言,所以現在兩種字體映射器都會返回給我們所需字體的引用。

    此更改適用於CE6和CE7平臺。由於arialuni.ttf支持所有這些字符集,所以西歐,東歐和遠東語言都可以正確繪製,等等。

目前還不清楚爲什麼CE6平臺正確映射字體,而CE7平臺沒有。我們控制內置於我們設備中的字體,因此我們可以保證日語字符支持的唯一性僅適用於arialuni.ttf。這顯然足以讓字體映射器做我們想要的。

+0

MS Mincho不支持日文嗎?它出現在CE6中,雖然我不確定CE7 ... 我有一些類似的文字顯示問題,儘管它是在寫入文件時,UI正確顯示(這是一個日文用戶界面)。 我建議在寫入之前轉換文本,如下所示: //對於Shift-JIS // cData是要寫入文件的文本數據。 CStringA outputString = CW2A(cData,932); cFile.Write(outputString,:: strlen(outputString)); 如何嘗試與此相反? – PRinCEKtd