RichEdit に関する質問

[戻る]
かずよ [E-Mail] 2002/05/13(月) 01:43:24
はじめまして。VC++をはじめたばかりの初心者です。
行き詰まってしまって質問させていただきました。
よろしかったら助けてもらえませんか?
<環境>
winNT VC++6.0 MFC (ダイアログベース作成中)
<対象>
VC++ラウンジ
<質問内容>
RichEditを2つ配置して、データを2種類読み込み、互いを比較して相違点がある行の背景色
を変えたいのです。
その背景色を一行分だけ変えることができずに困っています。すいませんが教えてもらえません
か?

dairygoods 2002/05/13(月) 10:17:29
RichEditには、背景色を指定する機能は無かったはず。
独自に描画すればなんとかなりそうですが、かなり面倒だと思います。

かずよ [E-Mail] 2002/05/13(月) 22:16:59
dairygoodsさんご回答本当にありがとうございます。
ではこういった場合、何かほかの方法があるのでしょうか?
あるのなら、ぜひ教えていただけませんか?
お願いします。

kazuma 2002/05/14(火) 00:33:18
CHARFORMAT2構造体にcrBackColorというメンバがあるので、
ひょっとしたら出来るのかもしれません。

出来なかったとして、
表示だけで編集が必要ないのなら、
TextOutやDrawTextを使って自分で書いてもたいした手間ではないと思います。

もしくは、
List BoxやList View Controlを使ってオーナー描画 or カスタム描画するとか。

TAD [E-Mail] 2002/05/14(火) 07:42:21
Rich Edit Control 2.0 にすれば、CHARFORMAT2 が使えます。
以下のペ−ジが参考になると思います。

http://codeguru.earthweb.com/richedit/RichEdit20.shtml (CodeGuru)

かずよ [E-Mail] 2002/05/14(火) 21:27:33
kazumaさんTADさん答えてくださってありがとうございました。

kazumaさんのいわれたList BoxやList View Controlがヘルプで詳しく調べようとみたのです
がアクティブサブセットがVisual C++ドキュメント指定のためみることができないのです。困
った〜。ほかのドキュメントに変えても私の環境で使用できるのでしょうか?

TADさんに質問なんですが、参考に教えていただいたアドレスにアクセスしましたらすべて英語
で書かれておりせっかく教えていただいたのに意味がわかりませんでした。これは翻訳ソフトが
ないと日本語では見れないのでしょか?だとしたらせっかく教えていただいたのに翻訳ソフトを
持っていないので意味が〜???です。

kazumaさんTADさんよろしかったらでいいんで教えてください。
初心者で迷惑かけて本当に、すいません。

TAD [E-Mail] 2002/05/15(水) 08:30:23
紹介したページは確かに英語ですが、ページ下からソースプロジェクトがダウンロードできます
ので、それを参考にすると良いでしょう。(私も英語は分かりません)
サンプルでは、CRichEditCtrl の代わりに、CRichEditCtrlEx を使用しています。これは、
同じ RichEditCtrl でも、別のバージョンを使うためです。
注意点としては、CRichEdit20App::OnInitInstnace で AfxInitRichEditCtrl を呼んでいる
ことと、ダイアログエディタに貼り付けるコントロールをカスタムコントロールにしていること
です。
色々調べてみてください。

背景の付け方ですが、そのソースの CMainDialog::OnInitDialog に、以下のコードを追加し
てみてください。

m_RichEditEx.SetWindowText("ABC"); // エディットボックスに3文字追加
m_RichEditEx.SetSel(0, 3); // 3文字を選択
    
CHARFORMAT2 cf;
ZeroMemory(&cf, sizeof(cf));
cf.cbSize        = sizeof(cf);
cf.dwMask        = CFM_COLOR | CFM_BACKCOLOR;
cf.crTextColor    = RGB(255, 255, 255); // 文字色
cf.crBackColor    = RGB(0, 0, 0);       // 背景色
m_RichEditEx.SendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);

ABC の3文字が白文字で、黒い背景に変わります。
CRichEditCtrl::SetSelectionCharFormat の代わりですが、CHARFORMAT2 構造体を使ってい
るので、SendMessage で直接コントロールを操作しています。

自分のプログラムに組み込むには、RichEditCtrlEx.cpp RichEditCtrlEx.h を、プロジェク
トに追加し、CRichEditCtrlEx クラスを使います。

少し大変かもしれませんけど、頑張ってみてください。

かずよ [E-Mail] 2002/05/15(水) 23:59:23
TADさんありがとうございました。
がんばってやってみます。
ちなみにこのCRichEditCtrlExはHELPにも記載されてなかったのですが
どこかにのっているのでしょうか?
それとも自分で開発したとか?
もしよろしければ、教えていただけませんか?
本当にかってばかりいってすいません。

TAD [E-Mail] 2002/05/16(木) 07:30:07
>ちなみにこのCRichEditCtrlExはHELPにも記載されてなかったのですが
どこかにのっているのでしょうか?

MFC のCRichEditCtrl を継承したオリジナルのクラスになっています。ヘルプはありません
が、ソースを見ても分かるように、メンバはごく僅かですので、理解するのにはそれほど苦労し
ないでしょう。
CRichEditCtrl のメンバはほぼすべて使えるので、これはヘルプを参考にできます。

かずよ [E-Mail] 2002/05/20(月) 00:19:51
[[解決]]
TADさんありがとうございました。あとは自分でがんばって習得したいと思います。
また、dairygoodsさん、kazumaさん、私の意見にお答えいただいてありがとうございまし
た。

古いスレッドには追加発言できません。