我有一个嵌入在应用程序中的基于MSHTML的控件,并使用ContentEditable模式编辑其中的文档。 HTML文档的主体最初包含以下几行:如何在鼠标点击过程中更改MSHTML中脱字号的位置?
<div></div>
<div id="signature"></div>
插入符号位于文档的开头,即第一个DIV元素的内部。现在,当鼠标用鼠标在最后一行下方的控件内部单击鼠标时,插入符号将移动到第二个DIV元素中,因为它是距离用户点击的点最近的一个元素。
我想将鼠标指针移到第一个DIV的末尾。现在我的代码可以计算插入符号的预期位置IMarkupPointer
和IDisplayPointer
。我需要知道的是截取MSHTML事件管道的位置,以便执行实际的脱字符号移动。
我编写的代码实现了IHTMLEditDesigner
,并使用IHTMLCaret.MoveCaretToPointer
将插入符号移动到预期位置。问题是无论我在哪里拦截事件(PreHandleEvent,PostHandleEvent或PostEditorEventNotify),插入符号位置最终都会在单击时恢复为默认位置(但是,如果按住鼠标左键一段时间,它将不会被还原,或者如果我用鼠标右键单击)。
感谢您提供很多有用的提示,但他们都没有真正回答我的具体问题。我不能使用JScript,但我可以钩住C#中的所有DOM事件,所以如果我只知道要挂钩的事件,我也可以做同样的事情。我已经与前面提到的前两个编辑器(Writer和NetRix)合作过了,它们都是越野车,并且没有我正在寻找的特定功能(点击控件时将光标移出签名DIV)。 – 2009-09-11 07:13:27
您可以使用MSHTML控件上的某些API添加jscript回调,方法是在创建控件后编辑DOM。当控件在后台线程上创建DOM时要小心,并且必须等到它启动了“已加载”事件。 – 2009-09-11 10:14:27
我认为这是接受的答案,因为你的回答真的帮助了我。我现在已经隔离了这个问题,稍后我会发布更多关于该解决方案的信息。你应该得到赏金点数。 – 2009-09-12 09:12:59