如何在C#的Windows shell上下文菜单中创建子菜单?

时间:2012-08-25 14:07:55

标签: c# windows-shell

我正在使用pInvokeIShellExtInitIContextMenu向C#中的资源管理器外壳添加上下文菜单。

我可以使用以下代码将单个项目添加到上下文菜单中:

MENUITEMINFO mii = new MENUITEMINFO();
mii.cbSize = (uint)Marshal.SizeOf(mii);
mii.fMask = MIIM.MIIM_BITMAP | MIIM.MIIM_STRING | MIIM.MIIM_FTYPE | MIIM.MIIM_ID | MIIM.MIIM_STATE ;
mii.wID = idCmdFirst + increment;
mii.fType = MFT.MFT_STRING;
mii.dwTypeData = contextMenuItem.ItemText;
mii.fState = MFS.MFS_ENABLED;
mii.hbmpItem = this._pMenuBitmap;

NativeMethods.InsertMenuItem(hMenu, increment, true, ref mii)

我想做的是添加一个菜单树;即将子菜单添加到新创建的菜单项。我的第一直觉是使用:

var subMenu = mii.hSubMenu;
...
NativeMethods.InsertMenuItem(subMenu,....)

但子菜单始终为零值。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我认为你的意思是你想要一个弹出的级联子菜单?

您需要使用:

  • CreatePopupMenu()创建新菜单
  • 将菜单项添加/插入
  • 然后使用MENUITEMINFO.hSubMenu设置为菜单的句柄,并使用MIIM_SUBMENU | MIIM_TYPE掩码插入到IContextMenu:QueryContextMenu的上下文菜单中}。

http://forum.cockos.com/archive/index.php/t-20799.html