• 第七节 Electron顶部菜单及右键菜单


    系列文章目录


    第一节 electron 介绍

    第二节 创建electron项目并启动

    第三节 Electron运行流程 、 主进程渲染进程并使用nodejs

    第四节 Electron 调用H5事件结合node模块fs 实现文件拖拽读取

    第五节 Electron 模块介绍 remote模块详细介绍

    第六节 Electron安全策略

    目录

    前言

    今天说说顶部菜单和右键菜单,顶部菜单electron默认就有不过是英文的。右键可没有需要自己搞。我们看下默认的顶部菜单(如下图1),修改后效果如图2。

    实现方法

    这节我们用到了Menu模块。它可以用来创建原生菜单,可用作应用菜单和 context 菜单。这个模块是主进程的一个模块,并且可以通过 remote 模块给渲染进程调用。

    一、环境及页面搭建

    环境搭建见第二节

    页面:在根目录下新建ipcMain文件夹新建menu.js文件

    二、顶部菜单

    1、在menu.js引入Menu模块

    const { Menu } = require("electron");
    

    2、定义菜单 在这块可以丰富你的菜单比如快捷键 点击事件等。

     API:Menu | ElectronCreate native application menus and context menus.https://www.electronjs.org/zh/docs/latest/api/menu

    1. const menuTemplate = [
    2. {
    3. label:"文件"
    4. },
    5. {
    6. label:"编辑"
    7. },
    8. ]

     3、调用buildFromTemplate传入自定义菜单

    const menuBuilder = Menu.buildFromTemplate(menuTemplate)
    

    4、设置菜单setApplicationMenu

    Menu.setApplicationMenu(menuBuilder)

    5、主进程引入menu.js

      require('./ipcMain/menu')
    

    6、完整menu.js代码

    1. const { Menu } = require("electron");
    2. const menuTemplate = [
    3. {
    4. label:"文件", // 菜单名
    5. submenu:[ // 二级菜单
    6. {
    7. label:'新建',
    8. accelerator:'ctrl+n', // 快捷键
    9. click:()=>{ // 点击事件
    10. console.log("create file")
    11. }
    12. },
    13. {type: 'separator'}, // 分割线
    14. {
    15. label:'打开',
    16. },
    17. {
    18. label:'保存',
    19. }
    20. ],
    21. },
    22. {
    23. label:"编辑",
    24. submenu:[
    25. {
    26. label:'复制',
    27. role:'copy', // 快捷键与系统冲突时可以使用role属性指定
    28. click:()=>{
    29. console.log("copy")
    30. }
    31. },
    32. {
    33. label:'粘贴',
    34. role:'paste',
    35. click:()=>{
    36. console.log("paste")
    37. }
    38. },
    39. {
    40. label:'保存',
    41. }
    42. ],
    43. },
    44. ]
    45. const menuBuilder = Menu.buildFromTemplate(menuTemplate)
    46. Menu.setApplicationMenu(menuBuilder)

     三、右键菜单

    实现逻辑:监听鼠标右键点击事件调用主进程的Menu模块。两种实现方法

    1. 使用@electron/remote模块(本节课使用方法)
    2. 主进程和渲染进程之间通信 (项目中推荐的)

     步骤:

    1. remote模块安装、主进程引入、初始化并启用 具体使用方法可参照第五节
    2. 渲染进程引入Menu模块
      1. const remote = require("@electron/remote")
      2. const Menu = remote.Menu

    3. 定义右键菜单 调用menuBuilder
      1. const menuContextTemplate = [
      2. {
      3. label:"编辑",
      4. submenu:[
      5. {
      6. label:'复制',
      7. role:'copy', // 快捷键与系统冲突时可以使用role属性指定
      8. },
      9. {
      10. label:'粘贴',
      11. role:'paste',
      12. },
      13. {
      14. label:'保存',
      15. }
      16. ],
      17. },
      18. ]
      19. const menuBuilder = Menu.buildFromTemplate(menuContextTemplate)

    4. 监听右键点击事件并阻止默认事件 调用menuBuilder.popup事件
    1. window.onload = ()=>{
    2. window.addEventListener("contextmenu",(e)=>{
    3. console.log("鼠标点击了右键")
    4. e.preventDefault()
    5. menuBuilder.popup(
    6. {
    7. window:remote.getCurrentWindow()
    8. }
    9. )
    10. },false)
    11. }

    总结

    以上就是今天要讲的内容,主要思路就是利用remote模块调用主进程模块。

    每天记录一点,助力成长!

    欢迎大家来浏览我的博客,如发现我有写错的地方,欢迎交流指正。

    如果你觉得本文对你有帮助,欢迎点赞收藏转载,烦请注明出处,谢谢! 

  • 相关阅读:
    Modbus TCP/RTU协议转PROFINET协议网关
    将两个文本中相同内容的记录做合并
    探索式测试的谬论
    Web服务器实验案例
    C# 第七章『I/O数据流』◆第1节:File类、FileInfo 类
    【Matlab】笔记:GeographicCellsReference 地理坐标知多少?矩阵、空间坐标、地理坐标之间转换等
    TiDB 软件和硬件环境建议配置
    Java字符串分割
    Spring MVC拦截器和跨域请求
    C的内联函数(C99)
  • 原文地址:https://blog.csdn.net/hongc93/article/details/126461663