2009-10-29 10 views
5

Visual Studioで "Use Unicode Character Set"を使用してMFC C++アプリケーションを構築しています。私はUNICODEを定義しています、私のCStringsは16ビットです、私は日本語の文字を含むファイル名などを処理します。しかし、私はCComboBox(AddStringを使って)に日本語文字を含むUnicode文字列を置くと、 。Windowsはどのように非Unicodeアプリケーションを識別しますか?

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

私はコンボボックスを正しく見たいので、「Unicode以外のプログラムの言語」設定がUnicodeプログラムの動作を変更する理由を理解したいと思います。私のアプリケーションがUnicodeアプリケーションであることをWindowsに伝えるために何かすべきことはありますか?

ありがとうございました!

答えて

7

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

デフォルトのUIフォントではないフォントを選択したため、文字が正しく出力されないことがあります。

+0

ありがとうございます。私は "Unicode以外のプログラムのための言語"を英語に戻しましたが、私のCComboBoxはまだまだ正しかったです! 私は、スイッチが、英語に戻ったときに残っていたより大きなシステムフォントをインストールしたと思っています。おそらく、それはあなたが「デフォルトUIフォント」の意味ですか?私はここで、またはMSDNで "デフォルトのUIフォント"への参照を見つけることができません。 –

+0

MFCで使用される「MS Shell Dlg」フォントは、実際にはオペレーティングシステムのデフォルトのUIフォントへのマッピングです。詳細はこちらの記事を参照してください。http://support.microsoft.com/?scid=kb;en-us;282187&x=11&y=13 – djeidot

0

どこから文字列を取得しますか? Cソースでハードコードされている場合は、AddStringを呼び出すときに(おそらく)既に破損しています。

何もUnicode文字列を取り込まないようにしてください。たとえば、std :: stringなどで "squeeze"してダメージを与えることはありません。アプリケーションがUnicodeとしてコンパイルされていても。

+0

これらは16ビットのwchar_t文字列で、デバッガで正しく表示されます。私はそれらをコンボボックスに追加する以外は何でもできます。 –