我使用 Microsoft Visual C++ 和 Windows 7。
我正在使用 ATL 和 MFC 开发 IE 工具栏。IE 版本为 11.0.9600.17420。
首先,我创建了 COM 对象实现IDeskBand
和IObjectWithSite
接口。
其次,我已经实现了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
为我的工具栏获取父窗口的界面呢?