- ベストアンサー
WIN32,VISUAL C++2005にて開発。ExtTextOut関数を実行すると文字化けする。原因と解決策を教えてください。
- WIN32初心者が開発中のプログラムにて、ExtTextOut関数を使用すると文字化けが発生します。特に、ウィンドウの背景色と同じ色に設定しようとすると文字化けが起きます。
- 原因としては、文字列の描画前に背景色を指定するため、文字列の描画には使用されていなかった背景色が指定されてしまい、文字化けが生じることがあります。
- 解決策としては、文字列の描画前に背景色を取得し、その背景色を使用するように変更することです。これにより、文字列の描画時には正しい背景色が使用され、文字化けが解消されます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MSDNより >BOOL ExtTextOut( > HDC hdc, // デバイスコンテキストのハンドル > int X, // 開始位置(基準点)の x 座標 > int Y, // 開始位置(基準点)の y 座標 > UINT fuOptions, // 長方形領域の使い方のオプション > CONST RECT *lprc, // 長方形領域の入った構造体へのポインタ > LPCTSTR lpString, // 文字列 > UINT cbCount, // 文字数 > CONST INT *lpDx // 文字間隔の入った配列 >); 第4引数はCOLORREF型ではないようですが…警告でなかったのでしょうか? > COLORREF sCOLOR = SetBkColor(hdc,GetBkColor(hdc)); この時点ではhdcは不定値のようですがエラーチェックなどは行わなくてよいのでしょうか?
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
wchar_tを表示するのなら ExtTextOutW( )を使った方がいいと思いますよ 又は LPCTSTR str = _T("Ver***byKKK"); してマルチバイトでもユニコードでもコンパイルできるようにした方がいいと思います。
お礼
回答ありがとうございます。 下記の記述でうまく行きました。 SetBkColorは変数に入れたりしなくてもいいみたいでした。 case WM_PAINT: HDC hdc; PAINTSTRUCT ps; wchar_t *str = L"Ver *** by KKK"; hdc = BeginPaint(hWnd, &ps); SetBkColor(hdc,RGB( 255, 128, 255 )); ExtTextOut(hdc,120,240,ETO_OPAQUE,NULL,(LPCTSTR)str, wcslen(str),NULL); EndPaint(hWnd, &ps); break;
お礼
回答ありがとうございます。 下記の記述でうまく行きました。 SetBkColorは変数に入れたりしなくてもいいみたいでした。 case WM_PAINT: HDC hdc; PAINTSTRUCT ps; wchar_t *str = L"Ver *** by KKK"; hdc = BeginPaint(hWnd, &ps); SetBkColor(hdc,RGB( 255, 128, 255 )); ExtTextOut(hdc,120,240,ETO_OPAQUE,NULL,(LPCTSTR)str, wcslen(str),NULL); EndPaint(hWnd, &ps); break;