リッチエディタコントロールの背景色

[戻る]
haruko 2010/08/07(土) 18:31:21
リッチエディタコントロールの背景色を指定し、作成しています。

そのリッチエディタコントロール上でクリックすると、入力不可 EnableWindow(FALSE)な
るようにしています。
その時、背景色が、灰色に変わってしまいます。
元の背景色のまま、入力不可にできないでしょうか?

よろしくお願いいたします。

bun 2010/08/09(月) 09:39:19
リソースの[Read Only]をTrueにするだけでは駄目?

実行時なら、EM_SETREADONLYメッセージを送ってみる。
MFCなら CRichEditCtrl::SetReadOnly() で良い。

haruko 2010/08/09(月) 13:10:33
bunさん、早速ご返事ありがとうございます。

次のようにしているのですが、カレットが消えないのです。
それでやむ終えず、EnableWindow(FALSE)を使用することにしました。

        m_rich.HideCaret();
        m_rich.SetReadOnly(TRUE);

どうして、カレットが消えないのでしょうか?

よろしくお願いします。

bun 2010/08/09(月) 15:11:18
> どうして、カレットが消えないのでしょうか?
ソースコードが無いので詳しいことは分かりません。
まぁ、きっとそういう風に作られているからでしょう。

カレットの点滅がどうしても気になる場合、
簡単な方法が見つからないなら、同じようなものを自分でゴリゴリ書くしかな
いでしょう。
ただ、個人的には以下のように思います。

簡単な方法が無いと言うことは、それを無理に行うことはWindows標準からかけ
離れることです。
わざわざ標準からかけ離れて良い結果を産むことはまれであり、(工数等も考慮
に入れると)よほどの理由がない限り行うべきではありません。

ryo 2010/08/09(月) 15:45:49
HideCaretは
「対象のウィンドウを『キャレット非表示モード(*1)』に切り替える」
というものではなく、「今でてるのを消す」だけ。

フォーカスをもつ、キャレットの位置が変わるといった
「キャレットの状態が変更して再描画」があれば再表示される

*1:このモードがあるかは聞いたことがない

maru 2010/08/09(月) 17:30:52
リッチエディットではなく普通のエディットコントロールですが、フォーカスを取得時
にCreateCaret+HideCaretすることにより、消去できました(フォーカスを失ったと
きにDestroyCaretが必要)。
ヘルプを見るとCreateCaretした後はShowCaretを呼び出さないと非表示の状態にとどま
るって書いてあるけど、ShowCaret無しで表示されました。そこでHideCaretを実行した
ところ表示されないようになりました。
まあ、対症療法なので、正しくはどうすべきなのかわかりません。

また、CreateCaretでサイズを0にしたらどうなるかと思ったけど、点状のキャレットが
表示されました。

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