0

DialogBox API を使用して、アプリケーションでダイアログを表示します。DLGPROC プロシージャ コールバックでの WM_INITDIALOG メッセージ処理で、テキスト文字列がデバッガで正しい Unicode であることを確認でき、SetDlgItemTextを使用してダイアログのリッチ エディット コントロールにテキストを設定します。ただし、 GetDlgItemText API を使用してダイアログからテキストを取得しようとすると、それらの文字はすべて疑問符でした。

私のプロジェクトは Unicode としてコンパイルされています。また、spy++ も使用しましたが、Windows Proc が Unicode であることを示しています。

英語ロケールの Windows 7 で中国語をテストしているので、自分のマシンに中国語言語パックもインストールしましたが、どちらも役に立ちません。

ここで見たものを説明できませんでした。これについて、またはさらにデバッグする方法について、誰かが光を当てることができれば幸いです。

4

1 に答える 1

0

そこにあるリッチエディット コントロールが原因であることがわかりました。テキスト ボックスだけを使用すると、中国語の文字が他の英語の文字と一緒に正しく表示されます。そのため、特にこれを読んだ後、いくつか試してみたところ、機能しました。したがって、基本的には SetDlgItemText を使用するべきではなく、代わりに次のコードを使用する必要があります (ここで、m_strDisplay はリッチ エディットで表示するテキストです)。

::SendMessage(hWndText, EM_AUTOURLDETECT, TRUE, NULL);
SETTEXTEX TextInfo = {0};
TextInfo.flags = ST_DEFAULT|SF_UNICODE;
TextInfo.codepage = 1200;
SendMessage(hWndText, EM_SETTEXTEX, (WPARAM)&TextInfo, (LPARAM)(LPCTSTR)m_strDisplay);

RichEdit コントロールにテキストを設定します。

于 2012-10-17T21:52:39.400 に答える