アプリケーションにMSHTMLベースのコントロールが埋め込まれていて、ContentEditableモードを使用してその中のドキュメントを編集しています。HTMLドキュメントの本文には、最初は次の行が含まれています。
<div></div>
<div id="signature"></div>
カレットは、ドキュメントの先頭、つまり最初のDIV要素内に配置されます。これで、ユーザーがコントロール内の最後の行の下の場所でマウスをクリックすると、カレットは2番目のDIV要素に移動します。これは、ユーザーがクリックしたポイントに最も近い要素であるためです。
マウスクリックで最初のDIVの終わりにポインタを移動したいと思います。これで、キャレットの意図された位置をととして計算するコードができましIMarkupPointer
た IDisplayPointer
。私が知る必要があるのは、実際のカレット移動を行うためにMSHTMLイベントパイプラインをインターセプトする場所です。
IHTMLEditDesigner
を使用してカレットを実装IHTMLCaret.MoveCaretToPointer
し、目的の位置に移動するコードを作成しました。問題は、イベントをインターセプトする場所(PreHandleEvent、PostHandleEvent、またはPostEditorEventNotify)に関係なく、シングルクリックで最終的にカレットの位置がデフォルトの位置に戻ることです(ただし、マウスの左ボタンをしばらく押したままにした場合、またはマウスの右ボタンでクリックします)。