TextOutでの日本語文字化け

[戻る]
KYO 2007/02/28(水) 11:14:34
TextOutで日本語が文字化けしてしまいます。
DrawTextでも同様に文字化けが起こります。
環境はWinXP、VC2005(日本語版)、APIです。
半角英字に関しては適切に表示されます。
どなたかわかる方アドバイスお願いします。

ソースの一部↓
char finger
sprintf(finger, "●");
TextOut( hDC, 200, 70, (LPCSTR)finger, 5);

TextOut( hdc, 10, 30, "あいう sample", 13 );
rec.top = 100;
rec.left = 200;
rec.right = 290;
rec.bottom = 200;
DrawText( hdc, "あいう sample", -1, &rec, DT_WORDBREAK | DT_CENTER );

Blue 2007/02/28(水) 11:22:46
>VC2005
デフォルトの文字セットがUnicodeになっているので、
「マルチバイト文字セットを使用する」
に変更してコンパイル/実行すれば表示できると思います。


オプションを変更したくない/できないのであれば、
char型ではなくTCHAR型でコーディングすればいいです。

参考:http://www.ruche-home.net/program/tips/tchar.php

KYO 2007/02/28(水) 11:44:22
Blueさん
早速の返答ありがとうございます。
今調べたら、私の開発環境はすでに「マルチバイト文字セットを使用する」になってい
ました。
ちなみに「Unicode文字セットを使用する」を選択すると、エラーがすごい数が出てきた
ので、Unicodeでは逆にコンパイルできません。

そして、char型をTCHARに変えて変数を指定しましたが、文字化けは直りませんでした。

すいませんが他の方法はありませんでしょうか?

Blue 2007/02/28(水) 11:46:50
その記述でフォントを設定している記述はありませんか?
日本語対応フォントにしないと、化けると思います。

KYO 2007/02/28(水) 13:26:51
ん〜フォントの設定はやってはいはずです。
(fontでプログラム内検索をしましたが、引っかかりませんでした。)
逆に言えばフォントの設定をすると、日本語が表示されるということですかね?

ちょっとやってみようと思います。

KYO 2007/02/28(水) 13:57:47
[[解決]]
フォントを指定したら解決しました。
Blueさんありがとうございました。


変更後のソース記述しておきます。↓


HDC hDC;
HFONT hFont;
char finger;

hFont = CreateFont(0,0,0,0,0,FALSE,FALSE,FALSE,
    SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,
    CLIP_DEFAULT_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_MODERN,"MS明朝");
hDC = BeginPaint(hWnd, &ps);
SelectObject(hDC, hFont);


sprintf(finger, "●");
TextOut( hDC, 200, 70, (LPCSTR)finger, 3);

TextOut( hdc, 10, 30, "あいう sample", 13 );
rec.top = 100;
rec.left = 200;
rec.right = 290;
rec.bottom = 200;
DrawText( hdc, "あいう sample", -1, &rec, DT_WORDBREAK | DT_CENTER );


DeleteObject(hFont);
EndPaint(hWnd,&ps);

Blue 2007/02/28(水) 14:02:53
少し不味いかも。

HFONT hOldFont;

hOldFont = SelectObject(hDC, hFont);

・
・
・

SelectObject(hDC, hOldFont);
DeleteObject(hFont);

とフォントを元に戻してからDeleteObjectすべきでしょう。

KYO 2007/03/02(金) 14:19:10
元々フォントの指定をしてない為か、
そのようにすると、
hOldFont = SelevctObject(hDC,hFont);
のところでエラーが出てしまうのですが、
フォントを元から指定してない場合でも、そのプログラムは入れる物なのでしょうか?
というか、フォントの初期設定をどこかで書いておかなければいけなかったのでしょう
か?

今まで描画領域で文字を扱ってなかったのでそこらへんがわからないのですが、
もし、初期設定をするほうが、良いのであれば、どこに書けばいいのかもよろしければ
教えてください。

Blue 2007/03/02(金) 14:25:03
> のところでエラーが出てしまうのですが
どんなエラーが出るんでしょうか?
単にキャストが必要なだけなのでは?

>hOldFont = SelectObject(hDC, hFont);
hOldFont = (HFONT)SelectObject(hDC, hFont);

※C言語でのコンパイルであれば、キャストは不要だし、
この程度のコンパイルエラーであれば、いちいち書かなくてもいいかなの思ったので
なにも書かなかったつもり。

>フォントを元から指定してない場合でも、そのプログラムは入れる物なのでしょうか?
>というか、フォントの初期設定をどこかで書いておかなければいけなかったのでしょう
か?
設定しなくても、最初からデフォルトのフォントは持っているはずです。

古いスレッドには追加発言できません。