static int count;
PAINTSTRUCT ps;
WCHAR str[10];
BeginPaint(hWnd,&ps);
wprintf(str,"%d",count);
TextOut(ps.hdc,10,20,str,wcslen(str));
textoutでcountに代入された数値を表示します。しかし、文字化けします。どうしてでしょうか?
unicode環境です。
wprintf(str,"%d",count);
おそらく、勘違いをされているのだと思いますが、
文字列に値をセットするのは printf() ではなく sprintf() になります。
そして、sprintf() の UNICODE 版は、swprintf() になります。
■ ランタイム ライブラリ リファレンス / sprintf、swprintf http://msdn.microsoft.com/ja-jp/library/ybk95axf%28VS.80%29.aspx
(wprintf() は、printf() の UNICODE 版なので、文字列には値はセットされません。文字化けしているのは、これが原因だと思われます。)
UNICODE 文字列を使う場合は、多くの文字列操作関数を UNICODE 版の関数に置き換えてあげる必要があります。
以下は、その置き換えるべき関数の一覧になります。
■ 汎用テキスト マップ / ルーチンのマップ http://msdn.microsoft.com/ja-jp/library/tsbaswba%28VS.80%29.aspx
sprintf() を swprintf() に置き換えた場合は、以下のようになります。
swprintf(str, L"%d", count);
このように UNICODE 版の関数を使用する場合は ""(ダブルクォーテーション)の前に「L」という接頭字(プレフィックス)を追加する必要があります。
こうすることで文字列が UNICODE(wchar_t 型)として処理されます。
<参考情報> ■ charとUnicodeとワイド文字をごっちゃにしないために http://marupeke296.com/CPP_charUnicodeWideChar.html
解決しました。