使用 MsHTML.h 的 Web 浏览器事件

Web Browser Events using MsHTML.h

我正在使用集成到我的程序中的 cwebpage。 C网页信息可以在这里找到:

https://www.codeproject.com/Articles/3365/Embed-an-HTML-control-in-your-own-window-using-pla

我的问题是关于事件的。我目前有这个设置来使用 IHTMLDocument2 中的 get_anchors() 来设置点击事件。然后,我遍历所有元素以在内存中创建一个 IDispatch。这包含事件信息。单击某个项目时,它会向 window 发送一个 WM_NOTIFY,然后我可以处理该事件并从所选元素中解析出我需要解析的内容。 这一切都很好,直到我 运行 进入我软件中的一个页面,其中有将近 50,000 个锚标记,其中我们 运行 内存不足,因为我们将事件保存在内存中直到页面被销毁。

有没有一种简单的方法可以获取被点击的元素,而无需为每个单独的元素设置事件?是否可以在文档级别设置点击事件,然后找到触发它的元素?我要做的就是获取被点击元素的 ID。

我尝试过的: 我尝试只使用在我们的浏览器 window 中读取的 WM_LBUTTONDOWN 消息,然后使用 htmlDoc2->elementFromPoint() 简单地从所选元素中获取我需要的信息。但是,如果页面被缩放或换行,这将无法正常工作。

请注意此编程是在 C/C++ 中,而不是 javascript 或 vb。

谢谢。

HTML 从子元素到父元素的事件 "bubble"。因此,您可以简单地将单个 onClick 处理程序分配给 IHTMLDocument2 本身,然后使用 srcElement property of the IHTMLEventObj object that is given to your handler every time on onClick event is fired by any child element on the page. See Understanding the Event Model.