【发布时间】:2011-05-10 16:00:00
【问题描述】:
我正在尝试为 Internet Explorer 7.0 实现自定义菜单。为此,我只能使用IDocHostUIHandler::ShowContextMenu。到目前为止,我能够实现一个带有两个选项的基本上下文菜单。问题是默认情况下它们被禁用。相同的示例代码是:
HRESULT CWebEventHandler::ShowContextMenu(DWORD dwID,POINT *ppt, IUnknown *pcmdTarget, IDispatch *pdispObject)
{
if (false) // I will put some guard code here. as of now do not consider it
return S_FALSE; // Show standard context menus.
else
{
IOleWindow* pWnd = NULL;
HRESULT hr = pcmdTarget->QueryInterface(IID_IOleWindow,
(void**) &pWnd);
if (SUCCEEDED(hr))
{
HWND hwnd;
if (SUCCEEDED(pWnd->GetWindow(&hwnd)))
{
HMENU menu = ::CreatePopupMenu();
::AppendMenu(menu, MF_STRING, ID_HELLO, L"&Hello" ); // ID_HELLO & ID_WORLD are two menu resource items
::AppendMenu(menu, MF_STRING, ID_WORLD, L"&World" );
long myRetVal = ::TrackPopupMenu(menu,
TPM_RIGHTBUTTON | TPM_LEFTALIGN | TPM_RETURNCMD,
ppt->x, ppt->y, NULL, hwnd, NULL);
// Send the command to the browser.
//
LRESULT myResult = ::SendMessage(hwnd, WM_COMMAND,
myRetVal, NULL);
}
pWnd->Release();
}
}
return S_OK;
}
请建议此代码有什么问题以及为什么我的菜单项被禁用??
谢谢
编辑
同样的帖子也可以在这个链接上找到(http://social.msdn.microsoft.com/Forums/en/ieextensiondevelopment/thread/13584f76-21bd-4764-b5b7-e81932561574)
【问题讨论】:
标签: c++ internet-explorer com contextmenu atl