描述:
我实现了一个上下文菜单扩展,继承了IContextMenu3接口,可是系统却不调用HandleMenuMsg和HandleMenuMsg2,这是怎么回事?
代码如下:
类的申明:
// CContextMenuExt
class ATL_NO_VTABLE CContextMenuExt :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CContextMenuExt, &CLSID_ContextMenuExt>,
public IShellExtInit,
public IContextMenu3
{
public:
CContextMenuExt()
{
}
~CContextMenuExt()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_CONTEXTMENUEXT)
DECLARE_NOT_AGGREGATABLE(CContextMenuExt)
BEGIN_COM_MAP(CContextMenuExt)
COM_INTERFACE_ENTRY(IShellExtInit)
COM_INTERFACE_ENTRY(IContextMenu)
COM_INTERFACE_ENTRY(IContextMenu2)
COM_INTERFACE_ENTRY(IContextMenu3)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
// IShellExtInit
STDMETHOD(Initialize)(LPCITEMIDLIST, LPDATAOBJECT, HKEY);
// IContextMenu
STDMETHOD(GetCommandString)(UINT, UINT, UINT*, LPSTR, UINT);
STDMETHOD(InvokeCommand)(LPCMINVOKECOMMANDINFO);
STDMETHOD(QueryContextMenu)(HMENU, UINT, UINT, UINT, UINT);
// IContextMenu2
STDMETHOD(HandleMenuMsg)(UINT, WPARAM, LPARAM);
// IContextMenu3
STDMETHOD(HandleMenuMsg2)(UINT, WPARAM, LPARAM, LRESULT*);
};
OBJECT_ENTRY_AUTO(__uuidof(ContextMenuExt), CContextMenuExt)
类的实现:
HRESULT CContextMenuExt::QueryContextMenu(HMENU hMenu, UINT uMenuIndex, UINT uidFirstCmd, UINT uidLastCmd, UINT uFlags)
{
MENUITEMINFO menuiteminfo;
ZeroMemory(&menuiteminfo, sizeof(menuiteminfo));
menuiteminfo.cbSize = sizeof(menuiteminfo);
menuiteminfo.fMask = MIIM_STRING | MIIM_FTYPE;
menuiteminfo.fType = MFT_OWNERDRAW;
menuiteminfo.dwTypeData = buf;
menuiteminfo.cch = (UINT) _tcslen(buf);
if (!InsertMenuItem(hMenu, uMenuIndex, TRUE, &menuiteminfo))
{
OutputDebugString(_T("InsertMenuItem failed"));
}
return MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 1);
}
解决方案1:
那分给我吧,呵呵