5

Visual Studio で [Unicode 文字セットを使用] を選択して MFC C++ アプリケーションを構築しています。UNICODE を定義し、CString は 16 ビットで、日本語の文字を含むファイル名を処理します。しかし、日本語の文字を含む Unicode 文字列を CComboBox に (AddString を使用して) 配置すると、????? として表示されます。 .

Windows XP Professional x64 (英語) を実行しています。Windows のコントロール パネルの [地域と言語のオプション] の [詳細設定] タブを使用し、非 Unicode プログラムの言語を日本語に設定すると、コンボ ボックスが正しく表示されます。

そのため、コンボ ボックスを正しく表示し、[非 Unicode プログラムの言語] 設定が Unicode プログラムの動作を変更する理由を理解したいと考えています。アプリケーションが Unicode アプリケーションであることを Windows に伝えるために他に何かすべきことはありますか?

助けてくれてありがとう!

4

2 に答える 2

7

Windows は、呼び出す関数によって、Unicode プログラムと非 Unicode プログラムの違いを認識しています。ほとんどの Windows API 関数には、非 Unicode 用の A と Unicode 用の W で終わる 2 つのバリアントがあります。これらの関数を定義するインクルード ファイルは、コンパイラの設定を使用して、どちらか一方を自動的に選択します。

文字が含まれていないフォントをデフォルトの UI フォントとして選択したため、文字が正しく表示されない可能性があります。

于 2009-10-29T03:52:59.207 に答える
0

どこから文字列を入手しますか?それらがCソースにハードコーディングされている場合、AddStringを呼び出した時点で、それらは(ほとんどの場合)すでに破損しています。

たとえば、Unicode文字列を取得してstd :: stringに「絞り込み」、損傷させることを妨げるものは何もありません。アプリケーションがUnicodeとしてコンパイルされている場合でも。

于 2009-11-11T08:34:16.827 に答える