我在应用程序中嵌入了一个基于 MSHTML 的控件,并且ContentEditable模式用于编辑其中的文档。HTML 文档的正文最初包含以下几行:
<div></div>
<div id="signature"></div>
插入符号位于文档的开头,即第一个 DIV 元素内。现在,当用户在控件内最后一行下方的位置单击鼠标时,插入符号将移动到第二个 DIV 元素中,因为它是最接近用户单击点的元素。
我想在鼠标单击时将指针移动到第一个 DIV 的末尾。现在我有代码来计算插入符号的预期位置为IMarkupPointer
和 IDisplayPointer
。我需要知道的是在哪里拦截 MSHTML 事件管道以执行实际的插入符号移动。
我编写了实现IHTMLEditDesigner
插入符号并将其移动IHTMLCaret.MoveCaretToPointer
到预期位置的代码。问题是,无论我在哪里截获事件(PreHandleEvent、PostHandleEvent 或 PostEditorEventNotify),插入符号位置最终都会在单击时恢复为默认位置(但如果我按住鼠标左键一会儿或者如果我用鼠标右键单击)。