我使用 IShellView :: GetItemObject (使用flag:SVGIO_BACKGROUND)获取文件夹的上下文菜单。
上下文菜单填充正常(当我们在空闲/空白空间中右键单击时,窗口浏览器会为文件夹填充)。
问题出现在我的上下文菜单的菜单项粘贴中,粘贴快捷方式在剪贴板中有条目时被禁用。 (还有文件夹的窗口上下文菜单,显示为启用)。
GetObjectContextMenu(const LPSHELLFOLDER lpParentFolder,
const LPITEMIDLIST lpRelativeIDL, DWORD dwFlags, bool fIsEmptySpace) const {
LPCONTEXTMENU lpcm;
LPSHELLVIEW lpsv;
HRESULT hResult= S_FALSE;
LPSHELLFOLDER lpFolder = NULL;
hResult = lpParentFolder->
CreateViewObject(m_pOwnerWnd!=NULL ? m_pOwnerWnd->GetSafeHwnd() : NULL, IID_IShellView,
(void**)&lpsv);
lpParentFolder->AddRef();
if(FAILED(hResult))
return NULL;
hResult = lpsv->GetItemObject(SVGIO_BACKGROUND, IID_IContextMenu, (LPVOID*)&g_pcm);
if(FAILED(hResult))
return NULL;
if(SUCCEEDED(g_pcm->QueryInterface(IID_IContextMenu2, (void**)&g_pcm2)))
{
if(!SUCCEEDED(g_pcm->QueryInterface(IID_IContextMenu3, (void**)&g_pcm3)))
{
//&g_pcm3 = NULL;
}
}
else
{
//&g_pcm2 = NULL;
}
HMENU hMenu=::CreatePopupMenu();
if(hMenu==NULL)
{
return NULL;
}
hResult=g_pcm->QueryContextMenu(hMenu,0,1,0x7fff, dwFlags );
if(FAILED(hResult))
{
return NULL;
}
char _name[100] = {0};
if(fIsEmptySpace)
lpsv->Release();
g_pcm->Release();
if( lpFolder != NULL)
{
lpFolder->Release();
}
return hMenu;
}