3

Windows CE 6 では、AddFontResource() を使用して arialuni.ttf (Arial Unicode MS、バージョン 1.0.1) をシステム フォント リストにロードすると、サポートされているすべての極東言語 (日本語、韓国語、簡体字、および繁体字中国語) が表示されます。フォントを使用してテキストを画面に描画すると、正しく表示されます。

Windows Compact 7 では、同じ手法で極東文字が画面に表示されません。画面に実際の文字が表示される代わりに、空のボックスが表示されます。これは、フォントが必要な文字セットをサポートしていない場合に見られる現象です。

両方のプラットフォームで同じコードと同じフォント ファイルを使用しています。コードをデバッグして、a) AddFontResource() を介してフォントが実際にシステム フォント リストに読み込まれていることを OS が主張している、b) 実際にテキストを描画する前にフォントが画面デバイス コンテキストに読み込まれていることを OS が主張している、および c) 実際の極東文字は、DrawText() に渡したバッファーにあります。これは、CE6 で動作するものとまったく同じです。

奇妙なことに、サポートされている東ヨーロッパ言語 (ロシア語、チェコ語、ブルガリア語) は、arialuni.ttf を読み込むかどうかに関係なく、Windows Compact 7 で正しく表示されます。レジストリによると、デフォルトのシステム フォントは Tahoma ですが、Tahoma が基本的な西ヨーロッパ言語以外をサポートしているとは思いませんでした。CE6未満ではありません。

他のフォントを追加したり使用したりしたくありません。Arialuni.ttf は、私たちがサポートする可能性のあるほぼすべての言語をサポートしており、西ヨーロッパ以外の言語に使用する唯一の言語です。

他のいくつかの True-Type フォントが既にインストールされているため、そのオプション (ラスター フォントではありません) は既に OS ビルドに含まれています。

  1. この arialuni.ttf は Windows Compact 7 と互換性がありますか?
  2. この種のフォントの読み込みとテキストの描画を機能させるために極東言語のサポートを追加するために、OS イメージに組み込む必要があるものはありますか?
  3. 私は Tahoma について間違っていますか?それは現在、東ヨーロッパの言語をサポートしていますか?
  4. 私は何が欠けていますか?

ありとあらゆるアイデアをありがとう。

4

1 に答える 1

2
  1. このバージョンの arialuni.ttf は、実際に Windows Compact 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 だけで日本語の文字サポートが一意であることを保証できます。これは明らかに、フォント マッパーに目的の処理を実行させるのに十分です。

于 2016-05-04T19:21:11.567 に答える