0

我的应用程序使用 MSHTML 有点问题。除了主题行中提到的快速打字时奇怪的击键丢失行为外,我一切正常。我认为这可能与我用来接收事件的方法有关?

详细信息:我的应用程序是在 Visual Studio 2005 中用 C++ 和 MFC 编写的单独程序。该程序附加到 Internet Explorer 的当前运行(独立)实例,并获取指向IWebBrowser2接口的指针并将其传递给类型为的对象CCmdTarget


class CHandler : public CCmdTarget
{
  IWebBrowser2* m_pWebBrowser2;
  DWORD m_dwBrowserCookie;
  …
  DECLARE_DISPATCH_MAP()
};

这个类跟踪浏览器中发生的事情。我使用以下命令接收浏览器事件:


LPUNKNOWN pUnkSink = GetIDispatch(FALSE);
retval = AfxConnectionAdvise((LPUNKNOWN)m_pWebBrowser2, DIID_DWebBrowserEvents2, pUnkSink, FALSE, &m_dwBrowserCookie);

如果我注释掉AfxConnectionAdvise,那么不会错过任何击键但不会有更多事件。如果我把它留在里面,我会沉没事件,但如果打字很快就会错过偶尔的击键。

我知道有很多方法可以连接到事件(AtlAdvise连接点),但这是我唯一可以使用的方法。

任何建议都会很棒!

4

2 回答 2

0

如果你只是在寻找击键,你不能子类化控件吗?

于 2009-05-16T17:55:47.097 回答
0

在封面之下,所有各种连接方法(AtlAdviseAfxConnectionAdvise等)都使用了IConnectionPointContainer,而且IConnectionPoint——它们只是为您节省了键入样板 COM goo 的时间。

我怀疑这与您连接到正在运行的 IE 实例的方式有关。你怎么得到IWebBrowser2指针?您是被加载到 IE 进程中还是一个单独的进程?如果您在IWebBrowser2与原始线程(IE Tab UI 线程)不同的线程上运行,您是否在进行正确的 COM 编组?

于 2009-05-16T18:14:51.527 回答