【发布时间】:2014-05-09 03:02:56
【问题描述】:
我正在为 Internet Explorer 9 编写插件,我必须将默认上下文菜单更改为我自己的。我正在用 C++ 编写 BHO,并且正在使用 ATL。我设法处理了显示上下文菜单 (HTMLDocumentEvents2::oncontextmenu) 的事件,但我无法显示我自己的。这是您单击鼠标右键时触发的代码:
VARIANT_BOOL STDMETHODCALLTYPE CSpellCheckerBHO::OnContextMenu( IHTMLEventObj *pEvtObj)
{
HMENU contextMenu = CreatePopupMenu();
MENUITEMINFO item_info = { 0 };
item_info.cbSize = sizeof(MENUITEMINFO);
item_info.fMask = MIIM_TYPE | MIIM_ID;
item_info.fType = MFT_STRING;
item_info.wID = 0;
item_info.dwTypeData = L"TEST";
item_info.cch = 4;
BOOL result = InsertMenuItem(contextMenu, 0, FALSE, &item_info);
HWND browserHandle = 0;
HRESULT hr = _webBrowser->get_HWND((LONG_PTR*)&browserHandle);
result = TrackPopupMenuEx(contextMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, 0,0, browserHandle , NULL);
return VARIANT_FALSE;
}
_webBrowser 是一个指向 IWebBrowser2 对象的指针,我是从 SetSite 函数中得到的。
不显示标准上下文菜单(由于返回 VARIANT_FALSE),但 TrackPopupMenuEx 不执行任何操作并返回 0。
你知道我做错了什么吗?我需要带有一些文本项的简单菜单。
【问题讨论】:
标签: c++ winapi internet-explorer contextmenu bho