0

我使用 Microsoft Visual C++ 和 Windows 7。
我正在使用 ATL 和 MFC 开发 IE 工具栏。IE 版本为 11.0.9600.17420。

首先,我创建了 COM 对象实现IDeskBandIObjectWithSite接口。
其次,我已经实现了IDeskBand方法和IObjectWithSite::SetSite方法。它只需要一个参数,IUnknown *pUnkSite

我记得,我可以pUnkSite->QueryInterface(IID_IOleWindow, (void**)&pOleWindow);从站点获取 IOleWindow 接口,然后我可以调用pOleWindow->GetWindow(&hWnd);来获取父窗口句柄;所以我可以创建我的工具栏窗口作为窗口的子窗口hWnd

所以我做到了,并意识到pUnkSite->QueryInterface(IID_IOleWindow, (void**)&pOleWindow);返回0x80004002的是E_NOINTERFACE错误,所以IOleWindow不是由pUnkSite对象实现的!我在调试器中打开IE,加载符号,追踪QISearch并意识到没有IOleWindow接口的实现。如果我没记错的话,那是CIEFrameAuto界面。

那么,如何IOleWindow为我的工具栏获取父窗口的界面呢?

4

0 回答 0