リッチエディットでキー入力フォントを設定するには?

解決


紅輝  2008-06-18 18:17:33  No: 68594

リッチエディットコントロールのフォントとサイズを変更して使用しています。
m_FontL.CreatePointFont(160, _T("MS ゴシック"));
m_richedit1.SetFont(&m_FontM);
このとき、プログラム的に表示させた文字は「MS ゴシック」で正常に表示されるのですが、SetSel()で表示した文字の最後にカーソルを置いて、それに続いてキー入力した文字は何故か「MS Pゴシック」で表示されます。  それ以降に続けて表示させた場合でも、その文字も「MS Pゴシック」となり困っています。  
キー入力は、MS IME2003で、直接入力です。
なお、最初からMS Pゴシックで設定すれば、プログラム的に表示させた文字も、キー入力した文字もMS Pゴシックで表示されるので違和感が無いので、今はMS Pゴシックとして使っていますが、読み易いMS ゴシックに設定したいので宜しくお願いします。


  2008-06-19 05:56:59  No: 68595

タイプミスだと思うのですがm_FontMはどこからきていますか?

VC6で試してみたのですが、再現できませんでした。以下試した方法

ダイアログベースで新規プロジェクト作成
リッチエディットを配置してメンバー変数登録
ヘッダに
  CFont FontL,FontM;
OnInitDialogに
  m_FontM.CreatePointFont(160, _T("MS ゴシック"));
  m_richedit1.SetFont(&m_FontM);
を記述、ボタンを配置してクリックイベントに
  m_richedit1.SetWindowText("あいうえお123万45671234");
  m_richedit1.SetSel(100,100);  <-適当
  m_richedit1.SetFocus();
を記述して実行

こんな感じで再現方法があると回答得られやすいかも。


  2008-06-19 08:47:07  No: 68596

>ヘッダに
> CFont FontL,FontM;
ごめん

CFont m_FontL,m_FontM;


紅輝  2008-06-19 16:19:17  No: 68597

「ん」さん、レス書き込み有難う御座います。
m_FontL, m_FontM;でしたね。  フォントの大きさをSMLの3段階にしています。
ところで、クリックイベントですが、
m_richedit1.SetWindowText(_T("あいうえお123万45671234"));
m_richedit1.SetSel(m_richedit1.GetWindowTextLengthW(), m_richedit1.GetWindowTextLengthW()); 
m_richedit1.SetFocus();
を記述した場合。
1)ボタンをクリックすると、リッチエディトに「あいうえお123万45671234」が表示されますよね。
2)この状態で、キーボードからABCDEと打っていただくと、キー入力した文字はMS  ゴシックではなくてMS Pゴシックになってしまいます。
3)この後に再度ボタンをクリックすると、「あいうえお・・・」が表示されますが、最初の1)で表示された文字はMS  ゴシックだったのに、キーボードから入力した文字の後にボタンを押して表示させた文字もつられてキーボードと同じ文字になってしまいます。
私の希望はキーボードからの文字も総て「MS ゴシック」に設定したいのです。
ところで、今朝、変なことに気付きました。この状態でキーボードの文字を試していたら、¥を打ったところ、EUとかアメリカで使っている/の反対の斜め線が表示されます。  キーボードの文字はの日本語に設定しているのにこれは何処かの設定がおかしいですよね。  Visual  Studio6  2005を使っていますが、C++のエディット画面での編集では¥は普通に打てますが、プログラムが動いてからリッチエディットへのキー入力がおかしいのです。  
ちなみに他のエディットボックスに試しに¥を打ち込んだところ、正常に¥が表示されました。  リッチエディットのフォント設定か何かが必要らしいと思うのですが、宜しくお願いいたします。


紅輝  2008-06-19 16:23:19  No: 68598

「と」さんでした。  大変失礼致しました。  ゆっくり読み直してから発信すべきですね。  良く書き間違いをして恥をかいています。申し訳ありませんでした。


紅輝  2008-06-19 17:29:11  No: 68599

すみません。SetWindowText(_T("あいうえお”))では、最初の一回しか文字がハリコできませんね。
m_richedit1.SetSel(m_richedit1.GetWindowTextLengthW(), m_richedit1.GetWindowTextLength());
m_richedit1.ReplaceSel(_T("あいうえお123万1234"), FALSE);
m_richedit1.SetFocus();
としてみてください。
なお、
文字表示をALLCAPSとしたいので、OnInitialUpdate()に
CHARFORMAT2 cf;
  cf.cbSize = sizeof(cf);
  cf.dwMask = CFM_ALLCAPS;
  cf.dwEffects = CFE_ALLCAPS;
  m_richedit1.SetSelectionCharFormat(cf);
を書き込んでいます。  
また、リッチエディット内の文字の一部を変更させたいので、m_richedit1.SetSel(k, k + 1);// kは文字色を変えたい位置
cf.cbSize = sizeof(cf);
cf.dwMask = CFM_COLOR;
cf.crTextColor = RGB(0,0,255);
m_richedit1.SetSelectionCharFormat(cf);
をプログラムの中ほどで必要な時に使っています。
このとき、cfの内容を先に読み込んでから設定をしていないので、フォント設定が変なことになるのでしょうか?
以上、宜しくお願いいたします。


  2008-06-19 20:28:01  No: 68600

失礼しました。結構有名な話みたいですね。

http://www.google.co.jp/search?hl=ja&rlz=1T4GGLJ_jaJP204JP205&pwst=1&q=EM_SETLANGOPTIONS&start=10&sa=N

私の勘違いだったみたいです。

lParam = ::SendMessage(m_richedit1.m_hWnd, EM_GETLANGOPTIONS, 0, 0);
lParam &= ~IMF_DUALFONT;   // 0x80 
::SendMessage(m_richedit1.m_hWnd, EM_SETLANGOPTIONS, 0, 0);

で解決するようですか、私には効果が確認できませんでした。


紅輝  2008-06-21 01:40:30  No: 68601

MS Pゴシックに設定すれば、文字に多少の違いが有りますが、そんなに違わないのでこれで逃げる事にしました。  普通のエディットコントロールの機能に加えて、文字の色が個々に設定できる簡便なカラーエディットコントロールを誰か作って欲しいですね。
今回はこのままで終わりにします。  「と」さん  この件でお付き合い頂き有難う御座いました。


紅輝  2008-06-29 05:03:22  No: 68602

リッチエディットで文字FONT設定と文字色の変更の件ですが、
ヘッダーに
CFont m_FontM;
CHARFORMAT2 cf;
を設定しておいて
ViewのOnInitDialogに
  m_FontM.CreatePointFont(160, _T("MS ゴシック"));
  m_richedit1.SetFont(&m_FontM);

// Richedit1の文字諸設定
  cf[1].cbSize = sizeof(cf[1]);
  cf[1].dwMask = CFM_COLOR|CFM_ALLCAPS|CFM_CHARSET;
  cf[1].dwEffects = CFE_ALLCAPS;
  cf[1].crTextColor = RGB(0, 0,255);// 青色文字
  cf[1].bCharSet = 0;
  m_richedit1.SetSelectionCharFormat(cf[1]);
  cf[0].cbSize = sizeof(cf[0]);
  cf[0].dwMask = CFM_COLOR|CFM_ALLCAPS|CFM_CHARSET;
  cf[0].dwEffects = CFE_ALLCAPS;
  cf[0].crTextColor = RGB(0,0,0);// 黒色文字
  cf[0].bCharSet = 0;
  m_richedit1.SetSelectionCharFormat(cf[0]);
  m_richedit1.SetSel(0,0);
  m_richedit1.ReplaceSel(_T("Strat> "),FALSE);
と記述してみたところ、Start>以降はキー入力してもMSゴシックのままで
文字色もSetSel(*,*)で青と黒を自由に変更が出来ました。
皆様有難う御座いました。一応最初に文字を入れる必要がありますが、解決です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加