【问题标题】:How to create a sub-menu in the Windows shell context menu in C#?如何在 C# 的 Windows shell 上下文菜单中创建子菜单?
【发布时间】:2012-08-25 22:35:54
【问题描述】:

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

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

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,....)

但子菜单始终为零值。

谁能帮帮我?

【问题讨论】:

  • 不建议使用托管代码编写shell扩展:blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx
  • @StephenEllis 你有没有实施过这个解决方案,我已经显示了我的上下文菜单,但现在我正试图弄清楚如何处理点击。子菜单不调用调用命令方法。
  • @blak3r 我确实做到了。我将不得不再次查看代码,因为我不记得在点击回调时遇到过问题。

标签: c# windows-shell


【解决方案1】:

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

你需要使用:

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

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

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多