WindowsCE5.0/EMbeddedVC++4.0SP4/SDK(MFC未使用)にて開発
たびたび、お世話になります。
Editコントロール内に表示されるカーソルは、|の形ですが、
■のようにしたい場合はどうすればいいのでしょうか?
たとえば、Excelの数式バーの中で編集する際に、[Insert]キーを押すたびに
挿入モード/上書きモードが変わり、カーソルの形状が変わります。
このときの、上書きモードのカーソルのような■形状にしたいのです。
理由は、|形状だと点滅していても存在感がなく分かりにくいからという
使用者からの要望です。
よろしくお願いします。
editコントロールなどで文字の入力位置を示すポインタはキャレットと呼びます。
キャレットの形状を変更するのはCreateCaretを使用します。
詳細はヘルプを見てください。
ご希望の環境でCreateCaretが使用可能かどうかは知りません。
う~ん、これは、難しいかもしれません。
EditがWindowsの指針に従っていると仮定すると、非アクティブになった時に
Editはキャレットを破棄してしまうかもしれません。
この場合再びEditがアクティブになったときに標準の「I」型キャレットを
作り直して、設定することでしょう。
この仮定が正しいとすると、Editに外部からキャレットを設定しても、
アクティブ<->非アクティブを遷移するだけで設定したキャレットは
失われてしまうことになります。
> EditがWindowsの指針に従っていると仮定すると、非アクティブになった時に
> Editはキャレットを破棄してしまうかもしれません。
MFCアプリを作成して確認してみました。
ダイアログにエディットボックスを二つ作って、片方のエディットボックスのSetFocus
イベントとエディットフォーカスイベントにハンドラを作成。
void CCaretByMfcDlg::OnEnSetfocusEdit1()
{
::CreateCaret(m_edit1.GetSafeHwnd(), NULL, 16, 16);
::ShowCaret(m_edit1.GetSafeHwnd());
}
void CCaretByMfcDlg::OnEnKillfocusEdit1()
{
::DestroyCaret();
}
m_edit1はCEditです。
これで対象のエディットは黒四角のキャレット、もう一方のエディットは普通のI形の
キャレットになりました。
つまり、WM_SETFOCUSメッセージとWM_KILLFOCUSメッセージに適切に対応してあげれば
いいのではないかと。
> つまり、WM_SETFOCUSメッセージとWM_KILLFOCUSメッセージに適切に対応してあげれば
> いいのではないかと。
エディットだからEN_SETFOCUS, EN_KILLFOCUSだったか。orz
確認が遅くなりまして、申し訳ありません。
教えていただいたとおり実行しました。
やったことは、次の通りです。
EN_SETFOCUSメッセージで、CreateCaretとShowCaretを実行し、
EN_KILLFOCUSメッセージで、DestroyCaretを実行。
みなさま、ありがとうございました。
文字の入力位置を示すポインタは「キャレット」と呼ぶんですね。
それすら知りませんでした。(恥)
どうりで、「カーソル」「形状を変える」で検索できなかったはずです。
もっと早くこのラウンジで質問すればよかったと思いました。
本当に感謝しております。改めまして、ありがとうございます。