Internet explorer IE11的IOleClientSite实现丢失WM_KEYUP和WM_KEYDOWN事件 我有一个嵌入在C++应用程序中的Internet Explorer 11。我已经实现了以下接口:

Internet explorer IE11的IOleClientSite实现丢失WM_KEYUP和WM_KEYDOWN事件 我有一个嵌入在C++应用程序中的Internet Explorer 11。我已经实现了以下接口:,internet-explorer,com,dom-events,Internet Explorer,Com,Dom Events,伊多乔斯图汉德勒 这会将所有方法传递给原始实现,但GetExternal返回外部对象的实现 IOleClientSite 这会将所有方法传递给原始实现。QueryInterface实现在请求时返回我的IDocHostUIHandler。它还返回到IUnknown。 我曾尝试将对其他接口的请求传递给最初的IOleClientSite实现,但这对下面描述的问题没有影响 我还在当前文档中附加了一个事件接收器,用于处理和触发DOM事件,但我确信这不是问题的一部分 问题是浏览器忽略了WM_KEYDOWN和

伊多乔斯图汉德勒

这会将所有方法传递给原始实现,但GetExternal返回外部对象的实现

IOleClientSite

这会将所有方法传递给原始实现。QueryInterface实现在请求时返回我的IDocHostUIHandler。它还返回到IUnknown。 我曾尝试将对其他接口的请求传递给最初的IOleClientSite实现,但这对下面描述的问题没有影响

我还在当前文档中附加了一个事件接收器,用于处理和触发DOM事件,但我确信这不是问题的一部分

问题是浏览器忽略了WM_KEYDOWN和WM_KEYCHAR消息(这些消息从未作为DOM事件激发),但确实响应了WM_CHAR消息(作为DOM keypress事件激发) 如果我没有插入IOleClientSite实现,那么这些事件将得到正确处理。因此,我相当肯定在我的IOleClientSite实现中有一些遗漏。 我的理解是,为了提供IDocHostUIHandler的实现,我必须实现IOleClientSite(也就是说,没有其他方法可以注入该接口的实现) 为什么我的WM_KEYDOWN和WM_KEYCHAR消息被忽略

请注意,其他一切都正常工作。我可以从JavaScript调用外部对象上的方法,我可以在事件接收器中接收DOM事件,我可以将事件激发到DOM中


无论如何,底层站点由Qt3.3QaxWidget提供。我知道这已经过时了;这项工作的最终目的是消除对这段旧代码的依赖。尽管如此,当删除我的IOleClientSite时,浏览器仍能正常运行,因此没有理由怀疑QAxWidget实现中存在问题。

这是两个问题的组合。包含浏览器的QAxWidget需要在派生类中实现TranslateKeyEvent。此外,您无法提供IOleClientSite的实现,因为Qt3.3已损坏,并且在内部它将继续引用自己的实现,而不是新的实现。我不得不修改QAxWidget以添加setDocHostUIHandler函数,并修改其QueryInterface以返回该函数。因此,默认的IOleClientSite将返回IID_IDocHostUIHandler的正确接口。

可能重复的