VS扩展开发(四) 添加右键菜单项 二级菜单

VS代码窗口默认右键菜单:
在这里插入图片描述
添加自定义右键菜单项“添加右键菜单lalala”后:
在这里插入图片描述
皮肤颜色是默认的,可以修改,可以参考其他博客(dbq,因为之前写这篇博客时截的代码图,后来自己发现太糊了而又懒得复原)
Commands package里包含了三组Guid和ID,
从父到子依次为:

guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN"
guid="guidRightClickPackageCmdSet" id="myMenuGroup"priority="0x1020"
guid="guidRightClickPackageCmdSet" id="cmdIDMyCommand"priority="0x0100" type="Button"

最开始父Guid和ID决定了菜单添加的位置
guid=“guidSHLMainMenu” id="IDM_VS_CTXT_CODEWIN"表示对主窗口的代码窗口的右键菜单操作

如果要添加二级菜单,如下图:
在这里插入图片描述

先新建一个group1以右键菜单为parent,一级菜单项要定义为Menu而不是Button,以group1为parent,再定义一个group2以一级菜单Menu为parent,再将二级菜单项定义为Button并以group2为parent

<GuidSymbol name="guidAddNewRightClickMenuCmdSet" value="{D4F02A6A-C5AE-4BF2-938D-F1625BDCA0E3}">
   <IDSymbol name="RightClickMenuNewGroup" value="0x3100" />
   <IDSymbol name="CommandNewId" value="0x3110" />
   <IDSymbol name="NewRightClickMenuGroup" value="0x3200" />
   <IDSymbol name="CommandNewSceneId" value="0x3210" />
   <IDSymbol name="CommandNewLayoutId" value="0x3220" /
</GuidSymbol>
<Menus>
    <Menu guid ="guidAddTopMenuCmdSet" id="TopLevelMenu" priority="0xFFFF" type="Menu">
      <Parent guid="guidSHLMainMenu" id="IDG_VS_MM_BUILDDEBUGRUN"/>
      <Strings>
        <ButtonText>Nibiru</ButtonText>
        <CommandName>Nibiru</CommandName>
      </Strings>
    </Menu>   
  <Menu guid ="guidAddNewRightClickMenuCmdSet" id="CommandNewId" priority="0x3110" type="Menu">
    <Parent guid="guidAddNewRightClickMenuCmdSet" id="RightClickMenuNewGroup"/>
    <Strings>
      <ButtonText>New</ButtonText>
      <CommandName>New</CommandName>
    </Strings>
 </Menu>

</Menus>
<Groups>
     <Group guid="guidAddNewRightClickMenuCmdSet" id="RightClickMenuNewGroup" priority="0x3100">
       <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_PROJNODE"/>
     </Group>
     <Group guid="guidAddNewRightClickMenuCmdSet" id="NewRightClickMenuGroup" priority="0x3200">
       <Parent guid="guidAddNewRightClickMenuCmdSet" id="CommandNewId"/>
     </Group>        
</Groups>
  
<Buttons>
    <Button guid="guidAddNewRightClickMenuCmdSet" id="CommandNewSceneId" priority="0x3210" type="Button">
      <Parent guid="guidAddNewRightClickMenuCmdSet" id="NewRightClickMenuGroup" />
      <Strings>
        <ButtonText>New Scene</ButtonText>
      </Strings>
    </Button>
  <Button guid="guidAddNewRightClickMenuCmdSet" id="CommandNewLayoutId" priority="0x3220" type="Button">
     <Parent guid="guidAddNewRightClickMenuCmdSet" id="NewRightClickMenuGroup" />
     <Strings>
       <ButtonText>New Layout</ButtonText>
     </Strings>
   </Button>       
 </Buttons>    
这里提供一个使用动态库的形式在 Peony 文件管理器中自定义右键菜单并增加二级菜单的示例。 1. 编写动态库代码 在一个名为“test_extension”的目录下,创建一个名为“test_extension.c”的文件,输入以下代码: ```c #include <gio/gio.h> #include <peony-extension/peony-extension.h> static void open_terminal(GtkMenuItem *menuitem, gpointer user_data) { system("gnome-terminal"); } static void init(PeonyMenuProviderIface *iface, gpointer user_data) { PeonyMenu *menu = peony_menu_provider_get_root_menu(iface); PeonyMenuItem *item = peony_menu_item_new("Open Terminal", NULL); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(open_terminal), NULL); peony_menu_append(menu, item); PeonyMenu *submenu = peony_menu_new("Submenu"); item = peony_menu_item_new("Submenu Item", NULL); peony_menu_append(submenu, item); peony_menu_append(menu, submenu); } G_MODULE_EXPORT void peony_extension_init(PeonyMenuProviderIface *iface, gpointer user_data) { init(iface, user_data); } ``` 这个代码定义了一个名为“test_extension”的动态库,当 Peony 文件管理器启动时会调用“peony_extension_init”函数。在这个函数中,我们使用 Peony 的 API 来创建一个菜单项“Open Terminal”,并在选中这个菜单项时打开终端。同时,我们还创建了一个名为“Submenu”的子菜单,并在其中添加了一个菜单项“Submenu Item”。 2. 编译动态库代码并生成动态库文件 在终端中进入“test_extension”目录,输入以下命令编译代码并生成动态库文件: ``` gcc -shared -fPIC -o libtest_extension.so test_extension.c `pkg-config --cflags --libs gio-2.0 peony-extension-2.0` ``` 这个命令将编译“test_extension.c”文件,并生成一个名为“libtest_extension.so”的动态库文件。 3. 将动态库文件复制到 Peony 的扩展目录中 在终端中输入以下命令将动态库文件复制到 Peony 的扩展目录中: ``` sudo cp libtest_extension.so /usr/lib/x86_64-linux-gnu/peony/extensions/ ``` 这个命令将动态库文件复制到“/usr/lib/x86_64-linux-gnu/peony/extensions/”目录中。如果提示“Permission denied”错误,则需要使用 sudo 命令以管理员权限运行这个命令。 4. 在 Peony 文件管理器中启用扩展 打开 Peony 文件管理器,右键点击任意文件或文件夹,在右键菜单中选择“扩展”->“启用扩展”,即可启用这个动态库扩展。 5. 在 Peony 文件管理器中使用自定义菜单 启用扩展后,在右键菜单中就会出现一个名为“Open Terminal”的菜单项和一个名为“Submenu”的子菜单。选中“Open Terminal”菜单项时会打开终端,选中“Submenu”子菜单时会显示“Submenu Item”菜单项。 这个示例演示了如何使用动态库的形式在 Peony 文件管理器中自定义右键菜单并增加二级菜单。你可以在这个示例的基础上修改代码,实现你自己的菜单项和子菜单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值