リッチエディタコントロールの背景色を指定し、作成しています。
そのリッチエディタコントロール上でクリックすると、入力不可 EnableWindow(FALSE)な
るようにしています。
その時、背景色が、灰色に変わってしまいます。
元の背景色のまま、入力不可にできないでしょうか?
よろしくお願いいたします。
リソースの[Read Only]をTrueにするだけでは駄目?
実行時なら、EM_SETREADONLYメッセージを送ってみる。
MFCなら CRichEditCtrl::SetReadOnly() で良い。
bunさん、早速ご返事ありがとうございます。
次のようにしているのですが、カレットが消えないのです。
それでやむ終えず、EnableWindow(FALSE)を使用することにしました。
m_rich.HideCaret();
m_rich.SetReadOnly(TRUE);
どうして、カレットが消えないのでしょうか?
よろしくお願いします。
> どうして、カレットが消えないのでしょうか?
ソースコードが無いので詳しいことは分かりません。
まぁ、きっとそういう風に作られているからでしょう。
カレットの点滅がどうしても気になる場合、
簡単な方法が見つからないなら、同じようなものを自分でゴリゴリ書くしかな
いでしょう。
ただ、個人的には以下のように思います。
簡単な方法が無いと言うことは、それを無理に行うことはWindows標準からかけ
離れることです。
わざわざ標準からかけ離れて良い結果を産むことはまれであり、(工数等も考慮
に入れると)よほどの理由がない限り行うべきではありません。
HideCaretは
「対象のウィンドウを『キャレット非表示モード(*1)』に切り替える」
というものではなく、「今でてるのを消す」だけ。
フォーカスをもつ、キャレットの位置が変わるといった
「キャレットの状態が変更して再描画」があれば再表示される
*1:このモードがあるかは聞いたことがない
リッチエディットではなく普通のエディットコントロールですが、フォーカスを取得時
にCreateCaret+HideCaretすることにより、消去できました(フォーカスを失ったと
きにDestroyCaretが必要)。
ヘルプを見るとCreateCaretした後はShowCaretを呼び出さないと非表示の状態にとどま
るって書いてあるけど、ShowCaret無しで表示されました。そこでHideCaretを実行した
ところ表示されないようになりました。
まあ、対症療法なので、正しくはどうすべきなのかわかりません。
また、CreateCaretでサイズを0にしたらどうなるかと思ったけど、点状のキャレットが
表示されました。