RICHEDITの指定行の背景色を変更するには?


ダメダメ君  2005-09-14 11:12:53  No: 58967

[windowsXP]
[VC++ 6.0]
[MFC(SDI)]

いつもお世話になってますダメダメ君です。
先日文字色変更の方法がわからず質問させて頂きましたが仕様変更により背景色の変更が必要となりました。過去ログ等参考にしてみたのですがまったくうまくいかず、期限までの日数も残り少ないので質問させて頂きます。

二つのRICHEDITがありそこに表示されたテキストを比較し差異のある行の背景色を変更したいのです。MFCで作るのは初めてなので何もわからず・・・VBのように簡単にはできないのでしょうか?
どなたか宜しければRICHEDITの指定行の背景色を変更する方法をご教授下さい。

以上、宜しくお願い致します。


シャノン  2005-09-14 15:13:10  No: 58968

EM_SETCHARFORMAT で CHARFORMAT2 構造体を使えばできそうだね。
ただ、行番号を指定しては無理みたい。
あらかじめ、指定行を選択しておく必要があるかな。

勝手に選択箇所が変わるのが嫌なら、
1.現在のカーソル位置と選択箇所を保存しておく
2.EM_HIDESELECTION で、選択しても色が変わらないようにしておく
3.上記の手順で背景色をセットする
4.1 で記憶しておいたカーソル位置と選択箇所を復元する
5.EM_HIDESELECTION で、選択したら色が変わるようにする
とかでできるかも。

試してないので、できなくて怒らないでね。


ダメダメ君  2005-09-14 17:12:19  No: 58969

シャノンさん
早速回答して頂きありがとうございます。

>EM_SETCHARFORMAT で CHARFORMAT2 構造体を使えばできそうだね。
>2.EM_HIDESELECTION で、選択しても色が変わらないようにしておく
”EM_SETCHARFORMAT”と”EM_SETCHARFORMAT”なのですが、これはClassWizardから選択するのでしょうか??
そうだとするとRICHEDITのメッセージの一覧には表示されないのですが
自分でクラスを作るんでしょうか?

度々すみませんが宜しくお願いします。


シャノン  2005-09-14 17:25:26  No: 58970

えーっと、MFC ではそれぞれ、CRichEditCtrl::GetSelectionCharFormat と、CRichEditCtrl::HideSelection にあたりますね。

MFC の基本ですが、
・何かメッセージを受信したときに処理をするというケースの場合、ClassView でイベントハンドラを追加
・何かメッセージを送信して処理をさせるというケースの場合、メッセージ名と似た名前のメソッドを使う
というパターンになります。
今回は、「RichEdit コントロールにメッセージを投げて背景色を設定する」ので、後者のパターンです。


Blue  2005-09-14 17:51:33  No: 58971

ところで、
http://www.mtakahashi.com/cgi.cgi?13598
はどうなったのでしょうか?

> 自分なりに色々と調べてみたところリッチエディットじゃなくても
> できそうだということはわかったのですが
のところで、できそうだとおっしゃっているのに、結局断念しているのは?

どういう経緯で、リッチエディットじゃなくてもできそうだとおもったのか、
そしてどうしてそれを断念してリッチエディットにしているのか詳細をきちんと記述して、
向こうのスレッドは閉じてください。
# だから、マルチポストは嫌われるんですよ。(どちらかのスレが置き去りにするから)

> 表示されたテキストを比較し差異のある行の背景色を変更したいのです。
RichEditではなく、WinDiffみたいにListViewにしてみるのはどうでしょうか?
# 結局カスタムドローせなあかんけど。

# 比較の定義が一番難しいと思うのは私だけ?(追加行削除行に対する扱い等)


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

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






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