- PR -

オーナードローにした場合に表示される文字化けについて

1
投稿者投稿内容
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2008-01-21 17:40
いつもお世話になっております。

VS2005 C++を使用しており、オーナードローによって設定した
ボタンのキャプションを表示させようとしたところ、実行時に日本語が文字化け状態になり正しく表示させることができません。

ただし、英語での表記には特に問題なく、またMessageBoxを使用した日本語表記にも問題がありません。さらには、オーナードローを使用しない場合にも日本語、英語とも問題がありません。

オーナードローを使用して、日本語を表示させたい場合にはどのようにすればよろしいのでしょうか?なにかスタイルを設定するべきですか?
ちなみに、プロジェクトのキャラクタセットはMulti-Byteであり、ストリングテーブルの言語は日本語に設定してあります。

なお、ボタンのプロパティをわざと使わずに、(CButtonの継承クラス).SetWindowText("テスト")としても
文字化け状態になりました。OSはWindows XP 日本語版です。

対策をご存知の方、よろしくお願いします。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2008-01-21 18:56
こんばんは。

フォントは疑ってみましたか?

文字列を描画(CDC::DrawText?)する前に
明示的にフォントを指定していますか?

CWnd::GetFontで取得したフォントを、
デバイスコンテキストに対してCDC::SelectObjectで設定してやるのが筋だと思います。

butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2008-01-22 11:22
ご返信ありがとうございます。

おっしゃるとおりフォントが原因でした。

ちなみに、多言語対応アプリケーションを使用したい場合に
使用すべきフォントは一般的に何が推進されているのでしょうか?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2008-01-22 11:58
引用:

buttheadさんの書き込み (2008-01-22 11:22) より:
ちなみに、多言語対応アプリケーションを使用したい場合に
使用すべきフォントは一般的に何が推進されているのでしょうか?


どのような目的のフォントかによりますが、原則として以下のいずれかでしょう。
・ユーザが任意に指定できるようにする。
・ストックフォントを利用する。
・MS UI Gothicを利用する。

今回はボタンの文字列と言うことなので、ストックフォントからSYSTEM_FONTを取得するのが理想だと思います。
ストックフォントを取得するには、GetStockObjectを使用します。

[ メッセージ編集済み 編集者: 甕星 編集日時 2008-01-22 11:59 ]
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2008-01-22 13:51
了解です。
貴重な情報ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)