IContextMenu除复制和剪切外,所有命令都正常工作

时间:2013-05-20 15:42:21

标签: winapi copy contextmenu cut windows-explorer

我正在开发一个Windows-explorer类型的应用程序,因为我试图调用IContextMenu操作,如复制,粘贴,属性,删除等,但仅复制和剪切操作未完成,而as他们成功地调用了。

请参阅下面的情景;

我将CMINVOKECOMMANDINFO.lpVerb设置为相应的命令字符串(“copy”,“paste”,“properties”等)。

CMINVOKECOMMANDINFO cmici={ sizeof(CMINVOKECOMMANDINFO) };
ZeroMemory( &cmici, sizeof(CMINVOKECOMMANDINFO));
cmici.cbSize = sizeof(CMINVOKECOMMANDINFO);
cmici.fMask=0;
cmici.hwnd=m_pOwnerWnd!=NULL ? m_pOwnerWnd->GetSafeHwnd() : NULL;
cmici.lpVerb= "copy";
cmici.lpParameters= NULL;
cmici.lpDirectory=NULL;
cmici.nShow=SW_SHOWNORMAL;
cmici.dwHotKey=0;
cmici.hIcon=NULL;

获取ITEMIDLIST的上下文菜单;

HRESULT hResult = lpParentFolder->GetUIObjectOf(
  m_pOwnerWnd!=NULL ? m_pOwnerWnd->GetSafeHwnd() : NULL, 1,
  (const struct _ITEMIDLIST**)&(lpRelativeIDL), IID_IContextMenu, 0,
  (LPVOID*)&lpcm)

查询上下文菜单;

hResult=lpcm->QueryContextMenu(hMenu,0,1,0x7fff,dwFlags);

最后调用;

    hResult=lpcm->InvokeCommand(&cmici);

::DestroyMenu(hMenu);

lpcm->Release();

if(FAILED(hResult))  
    return FALSE;

return TRUE;

命令删除,属性,粘贴等工作正常,但复制和剪切除外

在这方面,请任何人帮助我吗?

感谢。

1 个答案:

答案 0 :(得分:1)

此标题 OleInitialize 下的link提到了相同的问题。

我将调用OleInitialize()移动到表单的OnCreate事件处理程序,剪切 / 复制菜单项开始工作。