(本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢~)
接上一节: (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单
上一节说到如何弹出 IShellFolder 的上下文菜单,也就是 IContextMenu。有时候我们需要在这个菜单上面,加入一些属于自己的菜单项。举个例子,你打开资源管理器,查看左边目录树的右键菜单,会发现顶层多了一个折叠/展开的菜单项。好,我们也动手来加入这个菜单项。
修改例子3,我们找到 QueryContextMenu 处,这时候提供了一个菜单句柄:
然后增加以下代码:
接上一节: (C#)Windows Shell 编程系列3 - 上下文菜单(iContextMenu)(一)右键菜单
上一节说到如何弹出 IShellFolder 的上下文菜单,也就是 IContextMenu。有时候我们需要在这个菜单上面,加入一些属于自己的菜单项。举个例子,你打开资源管理器,查看左边目录树的右键菜单,会发现顶层多了一个折叠/展开的菜单项。好,我们也动手来加入这个菜单项。
修改例子3,我们找到 QueryContextMenu 处,这时候提供了一个菜单句柄:
//
提供一个弹出式菜单的句柄
IntPtr contextMenu = API.CreatePopupMenu();
iContextMenu.QueryContextMenu(contextMenu, 0 ,
API.CMD_FIRST, API.CMD_LAST, CMF.NORMAL | CMF.EXPLORE);
IntPtr contextMenu = API.CreatePopupMenu();
iContextMenu.QueryContextMenu(contextMenu, 0 ,
API.CMD_FIRST, API.CMD_LAST, CMF.NORMAL | CMF.EXPLORE);
然后增加以下代码:
/**/
/增加一个自定义菜单
string topInvoke = Tree1.SelectedNode.IsExpanded ? " 折叠(&A) " : " 展开(&A) " ;
MFT extraFlag = (Tree1.SelectedNode.Nodes.Count > 0 ) ? 0 : MFT.GRAYED;
API.InsertMenu(contextMenu, 0 , MFT.BYPOSITION | extraFlag,
( int )(API.CMD_LAST + 1 ), topInvoke);
// 增加分隔线
API.InsertMenu(contextMenu, 1 , MFT.BYPOSITION
string topInvoke = Tree1.SelectedNode.IsExpanded ? " 折叠(&A) " : " 展开(&A) " ;
MFT extraFlag = (Tree1.SelectedNode.Nodes.Count > 0 ) ? 0 : MFT.GRAYED;
API.InsertMenu(contextMenu, 0 , MFT.BYPOSITION | extraFlag,
( int )(API.CMD_LAST + 1 ), topInvoke);
// 增加分隔线
API.InsertMenu(contextMenu, 1 , MFT.BYPOSITION