TextOutでの日本語文字化け – プログラミング – Home

TextOutでの日本語文字化け
 
通知
すべてクリア

[解決済] TextOutでの日本語文字化け


KYO
 KYO
(@KYO)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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

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

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


返信引用
KYO
 KYO
(@KYO)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

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

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

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

その記述でフォントを設定している記述はありませんか?
日本語対応フォントにしないと、化けると思います。


返信引用
KYO
 KYO
(@KYO)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

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

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


返信引用
KYO
 KYO
(@KYO)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

フォントを指定したら解決しました。
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
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

少し不味いかも。

HFONT hOldFont;

hOldFont = SelectObject(hDC, hFont);



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

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


返信引用
KYO
 KYO
(@KYO)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

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

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


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> のところでエラーが出てしまうのですが
どんなエラーが出るんでしょうか?
単にキャストが必要なだけなのでは?

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました