2


1

キリル文字または日本語の文字を使用してウィンドウキャプションを設定できません。 疑問符またはランダムなゴミが見えますが、欲しいテキストは見えません。 SetWindowText()、SetWindowTextW()、SetWindowTextA()など、さまざまなエンコードを使用してみました。 SetWindowText()に文字列リテラルを渡しても機能しません。

Windowsのインストールには必要なものがすべて揃っているように見えます。たとえば、Internet ExplorerとFirefoxには、キリル文字と日本語のキャプションが正しく表示されます。 だから私たちは正しいエンコーディング/メソッドの組み合わせを見つけていないと確信しています。 助言がありますか?

3 Answer


1


あなたが(おそらく)あなたが持っている問題はあなたのアプリケーションのトップレベルのフレームウィンドウがANSIウィンドウであるということです。 内部では、(CreateWindow()またはCreateWindowEx()を使用して)ウィンドウを作成するときにウィンドウクラスを指定する必要があります。 このウィンドウクラスは、デフォルトでANSIメッセージまたはUnicodeメッセージを受け入れるかどうかなど、ウィンドウのプロパティを決定します。 言い換えると、これはあなた(またはあなたのフレームワーク)がRegisterClassExA()またはRegisterClassExW()を呼び出してウィンドウクラスを登録するかどうかによって設定されます。

最も確実なのは、最上位ウィンドウのクラスがRegisterClassExA()に登録されているということです。 つまり、ウィンドウのデフォルトのウィンドウプロシージャは、メッセージ内のすべてのUnicode文字列を処理する前にANSIに変換します。したがって、疑問符と奇数文字はいたるところにあります。

これらすべてに対する最も簡単な解決策は、アプリケーション全体をUnicodeにすることです(通常は_UNICODEを定義することによって行われます)。 もう1つの方法は、RegisterClassEx()が呼び出されている場所を特定し、それをRegisterClassExW()にすることです。 これは他のメッセージでANSI / Unicodeの問題を引き起こすかもしれませんが、(少なくとも理論上は)うまくいくはずです。 もちろん、それが問題であるならば、どちらの方法もWindows 9Xを壊すでしょう。

これらすべてが非常に複雑に聞こえるならば、あなたは間違っていません…​


0


_UNICODEを定義してアプリケーションをコンパイルする必要があります。 そうでなければ、すべてのウィンドウは依然としてMBCSになり、utf-16にはならないので、コードページが一致しない場合はキリル文字または日本語の文字を表示できません。


0


SetWindowText()? アプリケーションをUnicodeとしてコンパイルしましたか? そうでなければ、SetWindowText()は `SetWindowTextA()`と同等です。それは今度はあなたの現在のシステムロケール(別名:非Unicodeアプリケーションのための言語)に限定されます。

また、あなたはどうやってウィンドウを_CREATE_しましたか? `CreateWindowExW()`のような明示的にUnicode対応のAPIを使用しますか? そうでない場合は、プログラムがUnicodeとしてコンパイルされていることを確認してください。

プログラムがUnicodeとしてコンパイルされていない場合は、CP /地域のオプションで「Unicode以外のアプリケーションの言語」を変更することをお勧めします。 再起動が必要です。 もっと簡単に:キリル文字のシステムロケールをシミュレートするためにhttp://www.microsoft.com/globaldev/tools/apploc.mspx [MS AppLocale]を使用してください。