zoukankan      html  css  js  c++  java
  • Electron中实现菜单、子菜单、以及自带操作事件

    场景

    用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106413828

    Electron怎样进行渲染进程调试和使用浏览器和VSCode进行调试:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106414541

    在上面搭建好项目以及知道怎样进行调试后,那么Electron怎样实现菜单项。

    注:

    博客:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    首先在renderer.js中引入Menu和MenuItem

    const {remote} = require('electron');
    const {Menu, MenuItem} = remote;

    然后为了触发按钮弹出的操作,在index.html中添加一个按钮,并设置id

    <button id="menuItem">弹出菜单</button>

    然后在renderer.js中获取这个按钮并设置其点击事件,在点击事件中添加菜单项

    var btnMenuItem=document.getElementById('menuItem');
    btnMenuItem.onclick = PopMenu;
    
    function PopMenu()
    {
      const template = [
        { label: "公众号:" },
        { label: "霸道的程序猿" , click: () => {
            console.log("点击事件OK");
        }},
        { role: "undo"},
        { role: "redo"},
        { label: "旅游", type: "checkbox", checked: true},
        { label: "", type: "checkbox", checked: true},
        { label: "逛街", type: "checkbox", checked: false},
        new MenuItem({label: "这是menuItem生成的菜单", click: ()=> {
            console.log("您点击了menuItem的菜单");
        }}),
        {
            label: "子菜单测试",
            submenu: [
                {label: "子菜单-1"},
                {label: "子菜单-2"},
                {label: "子菜单-3"}
            ]
        }
    ];
    const menu = Menu.buildFromTemplate(template);
    menu.popup();
    }

    效果

    上面的undo就是执行撤销的操作,redo就是重新执行撤销的操作,类似的操作还有

    const template = [
      {
        label: 'Edit',
        submenu: [
          {role: 'undo'},
          {role: 'redo'},
          {type: 'separator'},
          {role: 'cut'},
          {role: 'copy'},
          {role: 'paste'},
          {role: 'pasteandmatchstyle'},
          {role: 'delete'},
          {role: 'selectall'}
        ]
      },
      {
        label: 'View',
        submenu: [
          {role: 'reload'},
          {role: 'forcereload'},
          {role: 'toggledevtools'},
          {type: 'separator'},
          {role: 'resetzoom'},
          {role: 'zoomin'},
          {role: 'zoomout'},
          {type: 'separator'},
          {role: 'togglefullscreen'}
        ]
      },
      {
        role: 'window',
        submenu: [
          {role: 'minimize'},
          {role: 'close'}
        ]
      },
      {
        role: 'help',
        submenu: [
          {
            label: 'Learn More',
            click () { require('electron').shell.openExternal('https://electron.atom.io') }
          }
        ]
      }
    ]
    
    if (process.platform === 'darwin') {
      template.unshift({
        label: app.getName(),
        submenu: [
          {role: 'about'},
          {type: 'separator'},
          {role: 'services', submenu: []},
          {type: 'separator'},
          {role: 'hide'},
          {role: 'hideothers'},
          {role: 'unhide'},
          {type: 'separator'},
          {role: 'quit'}
        ]
      })
    
      // Edit menu
      template[1].submenu.push(
        {type: 'separator'},
        {
          label: 'Speech',
          submenu: [
            {role: 'startspeaking'},
            {role: 'stopspeaking'}
          ]
        }
      )
    
      // Window menu
      template[3].submenu = [
        {role: 'close'},
        {role: 'minimize'},
        {role: 'zoom'},
        {type: 'separator'},
        {role: 'front'}
      ]
    }
    
    const menu = Menu.buildFromTemplate(template)
    
    menu.popup();

    效果

     

  • 相关阅读:
    [五]SpringMvc学习-Restful风格实现
    [四]SpringMvc学习-对servlet与json的支持与实现
    [三]SpringMvc学习-封装、乱码问题、重定向、转发
    Android-aidl, binder,surfaceview
    linux memory dump--http://www.forensicswiki.org/wiki/Tools:Memory_Imaging
    Vanish/squid
    dongle --NFC
    词频统计 in office
    各种小巧的Hello World
    程序入口函数和glibc及C++全局构造和析构
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/13068394.html
Copyright © 2011-2022 走看看