- 締切済み
ボックスにフランス語を表示するには?
C++ (mingw32) > C:>g++ --version > g++ (GCC) 3.4.5 (mingw-vista special r3) > Copyright (C) 2004 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. という環境で、Win32API を使って Windows プログラムを作っているのですが、エディット・ボックス等の各種コントロールで、多言語表示を行うにはどうすれば良いのでしょうか? なお現在 ・*.rc でリソースを用意 ・CreateFont() 関数を使ってフォント作成 ・SendMessage() 関数を使って、 o 表示する文字列指定 o フォントの指定 までは出来ています。ただフランス語などで使われる発音記号つきの文字部分が漢字に化けて困っています。(Times 等の欧文フォントを指定しても、漢字は適当なフォントが代価されている。) 実際には、多言語というよりダイアログ・ボックスを表示する毎に、英語なら英語だけ、フランス語ならフランス語だけで十分です。 場違い、情報不足などの場合、改めて御教示頂ければ幸いです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
追記。 ロケールの詳細は http://msdn.microsoft.com/ja-jp/library/x99tb11d(VS.80).aspx とかを参照。
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
フォントだけ変更し、ロケールを変更しないで居ると、システムは「文字列は日本語だな。じゃあ、指定したフォントで表示可能なASCII文字は指定されたフォントで表示し、指定したフォントに無い漢字は代替の適当なフォントで表示しようっと」と、文字列が日本語で書かれていると思って動作します。 なので「ロケールはフランス語圏だ!私は、今、フランス語で書かれた文字列を表示するんだ!」とシステムに通知しなければ、フランス語は表示出来ません。 フォントだけ変えてロケールを正しく設定しないと、システムは「何か表示しろって言われたけど、これって日本語だよね?」と勝手に解釈してしまいます。 要は「私はフランス人だ」と宣言しないと、勝手に「あんたって日本人だよね」と思われてしまう、と言う事です。
お礼
実際のプログラム中で DllMain() の呼び出し直後や、CreateFont(), SendMessage() (実際にはマクロ) の直前に、 setlocale( LC_ALL, "french" ); を入れてみたのですが、文字化けは直りませんでした。 他に何か必要なのでしょうか?
補足
chie65535 さんこんにちは。 > ロケールの詳細は > http://msdn.microsoft.com/ja-jp/library/x99tb11d(VS.80).aspx > とかを参照。 有難うございます。 CreateFont() でロケールの指定があったので、それだけかと思ったのですが、文字列に対しても必要なんですね。 まだ試していませんが、取り敢えず御礼だけしておき、結果は後日書き込みます。