我正在托管一个 Web 浏览器控件,并希望提供我自己的上下文菜单。
理想情况下,我想展示我自己的上下文菜单,其中包含原始浏览器的上下文菜单(包含所有插件等)作为子菜单。
如果这不可能/很难,我可以正常显示我的上下文菜单,并在用户按下 SHIFT 时显示原始菜单。
我需要实现IDocHostUIHandler吗?如果是,如何指定自定义上下文菜单,如何强制使用原始菜单?如何让控件使用我的实现?
控件是这样创建的(省略错误处理):
HRESULT hr=AtlAxCreateControlEx(
L"Shell.Explorer",m_wndWebCtrl.m_hWnd,
NULL,NULL,(IUnknown**)&unk,
IID_IWebBrowser2, NULL); // (IPersistStreamInit*)this);
hr = AtlAdviseSinkMap( this, true);
IUnknownPtr unk;
AtlAxGetControl(m_wndWebCtrl.m_hWnd, &unk);
IWebBrowser2Ptr browser2 = unk;