- 締切済み
MFCのキャプション変更
はじめまして。 環境はVC++6.0 XPです。 MFCでのあるプログラムの中で CWnd* pWnd = GetDlgItem( IDC );//EditBox pWnd->SetWindowText( hoge); SetWindowText( hoge );//hogeは文字列が入った変数 というコードがあるのですが、 このhogeの中にはハングル文字(韓国語)が入っていており、エディットボックスにはちゃんと韓国語が入っているのですが、ウィンドウのタイトルバーには?が入っていてちゃんと表示されていません。 どうすれば表示できるのか教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- bluecampus
- ベストアンサー率66% (138/209)
> 設定でプリプロセッサ定義で_UNICODEがあります。 http://rararahp.cool.ne.jp/vc/vctips/unicode.htm の ■ Unicode対応のプロジェクトにする としてもダメでしょうか? それとOSは何でしょうか? ちなみに、VS2005 Vista 環境では wchar_t hoge[] = {0xc11c,0xc6b8,0x0000}; this->SetWindowText(hoge); はちゃんと出ました。 # VC6では無理なのか?
- bluecampus
- ベストアンサー率66% (138/209)
プロジェクトの文字セットがマルチバイト文字セットになっているのではないでしょうか? (VC++6.0はデフォルトのコンパイルオプションはマルチバイトセット) Unicodeで受け取ってUnicodeで渡すようなコードにしないと、 (OSが?)日本語環境ではCP932(=Shift_JIS)で表現できない文字は表示できないし、情報が落ちたりします。 今からUnicodeに変更できるのであれば、プロジェクトの設定を変更するほうがよいでしょう。 (その代わり、 CString s = "abc"; のような記述は _T マクロを、charでやり取りしているところをTCHARにするのかの検証が必要になります。) 目的が質問に書かれているのみであれば、そこだけ~Wを使うように変更するとできるでしょう。 (他にテキストボックスの文字を使っていろいろやる場合は現実的ではない。) >pWnd->SetWindowText( hoge); // Getではない? wchar_t hoge[256]; // サイズは適当。(GetWindowTextLengthWで取得して、+1のサイズでnewするとサイズを決め打ちにしなくてもよい。) ::GetWindowTextW(pWnd->GetSafeHwnd(), hoge, _countof(hoge)); ::SetWindowTextW(this->GetSafeHwnd(), hoge);
補足
設定でプリプロセッサ定義で_UNICODEがあります。 wchar_t hoge[] = {0xc11c,0xc6b8,0x0000};//文字コードはハングル文字 ::SetWindowTextW(this->GetSafeHwnd(), hoge); このように直接ハングル文字のコードをwchar_tに入れて、放っても、??が表示されます。 エディットボックスには表示されるのにウィンドウのタイトルバーには表示されない状態です(^^;
お礼
よくみたら、表示できないプログラムのほうのプロジェクトは MFC AppWizard(dll)で作成しています。 dllだから表示ができないということなのでしょうか?
補足
>Unicode対応のプロジェクトにする としてもダメでしょうか? これを行なっているのですが、表示されないです。 http://rararahp.cool.ne.jp/vc/vctips/unicode.htm内の >「プロジェクト」→「設定」→「リンク」→「アウトプット」の 「エントリポイントシンボル」にwWinMainCRTStartupと書き込む。 (これをやらないと_WinMain@16は未解決ですとコンパイルエラーになります) これを行なわなくてもエラーにはならなくプログラム実行でき、これを行なうと、下のデバッグ表示画面にエラーではないのですが色々と表示されて、プログラムが立ち上がらない状態です。 >それとOSは何でしょうか? Windows XPです。 新規のプロジェクトを作成してやってみたら、ちゃんと表示されていました。 となるとそのプロジェクトのプログラムには何か問題があるみたいですかね。