Edit内に表示されるカーソル形状を変えるには – プログラミング – Home

Edit内に表示されるカーソル形状を変...
 
通知
すべてクリア

[解決済] Edit内に表示されるカーソル形状を変えるには


JILL
 JILL
(@JILL)
ゲスト
結合: 14年前
投稿: 18
Topic starter  

WindowsCE5.0/EMbeddedVC++4.0SP4/SDK(MFC未使用)にて開発

 たびたび、お世話になります。
Editコントロール内に表示されるカーソルは、|の形ですが、
■のようにしたい場合はどうすればいいのでしょうか?

 たとえば、Excelの数式バーの中で編集する際に、[Insert]キーを押すたびに
挿入モード/上書きモードが変わり、カーソルの形状が変わります。
このときの、上書きモードのカーソルのような■形状にしたいのです。
理由は、|形状だと点滅していても存在感がなく分かりにくいからという
使用者からの要望です。

よろしくお願いします。


引用未解決
トピックタグ
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

editコントロールなどで文字の入力位置を示すポインタはキャレットと呼びます。
キャレットの形状を変更するのはCreateCaretを使用します。
詳細はヘルプを見てください。
ご希望の環境でCreateCaretが使用可能かどうかは知りません。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

う~ん、これは、難しいかもしれません。
EditがWindowsの指針に従っていると仮定すると、非アクティブになった時に
Editはキャレットを破棄してしまうかもしれません。
この場合再びEditがアクティブになったときに標準の「I」型キャレットを
作り直して、設定することでしょう。

この仮定が正しいとすると、Editに外部からキャレットを設定しても、
アクティブ<->非アクティブを遷移するだけで設定したキャレットは
失われてしまうことになります。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> 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メッセージに適切に対応してあげれば
いいのではないかと。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> つまり、WM_SETFOCUSメッセージとWM_KILLFOCUSメッセージに適切に対応してあげれば
> いいのではないかと。
エディットだからEN_SETFOCUS, EN_KILLFOCUSだったか。orz


返信引用
JILL
 JILL
(@JILL)
ゲスト
結合: 14年前
投稿: 18
Topic starter  

確認が遅くなりまして、申し訳ありません。

教えていただいたとおり実行しました。
やったことは、次の通りです。
 EN_SETFOCUSメッセージで、CreateCaretとShowCaretを実行し、
 EN_KILLFOCUSメッセージで、DestroyCaretを実行。

みなさま、ありがとうございました。
文字の入力位置を示すポインタは「キャレット」と呼ぶんですね。
それすら知りませんでした。(恥)
どうりで、「カーソル」「形状を変える」で検索できなかったはずです。
もっと早くこのラウンジで質問すればよかったと思いました。
本当に感謝しております。改めまして、ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました