• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MFC:リッチエディットからUnicode文字列を受け取りたい)

MFCでリッチエディットからUnicode文字列を受け取る方法

このQ&Aのポイント
  • MFCのダイアログベースでプロジェクトを作成し、Unicode文字セットを使用する設定を行います。
  • リッチエディット2.0にUnicode文字を入力しても文字化けする問題が発生し、正常に受け取る方法を探しています。
  • エディットボックスではUnicode文字を受け取ることができるが、リッチエディット2.0では文字化けが発生します。解決方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#75489
noname#75489
回答No.1

おそらく、フォントがUnicode1.1に対応していないのだと思います。 ダイアログのフォントに「Arial Unicode MS」などを指定すれば表示されるようになると思います。

参考URL:
http://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF
jeddom
質問者

お礼

ご回答ありがとうございます。また、お礼が遅れて申し訳ありません。   実は自己解決していたのですが、回答者がいない状態では質問を締め切れず、また「自分と同じ悩みを抱えた人がいるかもしれない」という思いから、記事を削除することもできず、半放置状態でした。   以下の方法で解決しました。   //----------------ダイアログの.cppに追加 void AFXAPI CMainDlg::DDX_TextUni(CDataExchange* pDX, int nIDC, CString& value) {  HWND hWndCtrl = pDX->PrepareEditCtrl(nIDC);  if(pDX->m_bSaveAndValidate){   GETTEXTEX gtex;   gtex.cb = 1024;   gtex.flags = GT_USECRLF; // 改行コード変換なし(改行コードは CR のみ)   gtex.codepage = 1200; // UNICODE   gtex.lpDefaultChar = NULL; // 1200 なので未使用   gtex.lpUsedDefChar = NULL; // 1200 なので未使用   ::SendMessage( hWndCtrl, EM_GETTEXTEX, (WPARAM)&gtex, (LPARAM)value.GetBufferSetLength(1024) );   value.ReleaseBuffer();  }else{   SETTEXTEX stex;   stex.flags = ST_DEFAULT;   stex.codepage = 1200; // UNICODE   ::SendMessage( hWndCtrl, EM_SETTEXTEX, (WPARAM)&stex, (LPARAM)value.GetBuffer() );  } }   void CMainDlg::DoDataExchange(CDataExchange* pDX) {  CDialog::DoDataExchange(pDX);  (中略)  DDX_TextUni(pDX, IDC_RICHEDIT, m_RichEditVal); //リッチエディットに割り当てた値変数 }   //----------------ダイアログの.hに追加 void AFXAPI DDX_TextUni(CDataExchange* pDX, int nIDC, CString& value);   参考URL:http://d.hatena.ne.jp/halts/20030805   要は、コードページを1200(UNICODE)に設定して、DDXでそれを知らせてやる必要があったわけです。 わざわざご回答いただいたのに失礼かとは思いますが、これにて質問を締め切らせていただきます。

関連するQ&A

専門家に質問してみよう