文件夹的上下文菜单项“粘贴”和“粘贴快捷方式”已禁用

时间:2013-05-23 22:11:35

标签: c++ shell winapi mfc contextmenu

我使用 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;
}

0 个答案:

没有答案