自学内容网 自学内容网

Electron:Menu 自定义菜单的使用、自定义右键菜单、动态创建菜单

const {app, BrowserWindow, ipcMain, dialog, globalShortcut, Menu} = require('electron')
const path = require('path')
const WinState = require('electron-win-state').default

const mainMenu = (args, callback) => {
    return Menu.buildFromTemplate([
        {
            label: 'electron',
            submenu: [
                {
                    label: 'submenu-1',
                },
                {
                    label: 'submenu-2',
                }
            ]
        },
        {
            type: 'separator', // 分割线, 上下两个不同功能添加一个分割线使用
        },
        {
            label: '类型',
            submenu: [
                {
                    label: '选项1',
                    type: 'checkbox'
                },
                {
                    label: '选项2',
                    type: 'checkbox'
                },
                {
                    type: 'separator', // 分割线, 上下两个不同功能添加一个分割线使用
                },
                {
                    label: '单选1',
                    type: 'radio'
                },
                {
                    label: '单选2',
                    type: 'radio'
                },
                {
                    type: 'separator', // 分割线, 上下两个不同功能添加一个分割线使用
                },
                {
                    label: 'windows',
                    type: 'submenu',
                    role: 'windowMenu'
                },
            ]
        },
        // 系统自带的功能role
        {
            label: 'Edit',
            submenu: [
                {
                    role: 'undo'
                },
                {
                    role: 'redo'
                },
                {
                    role: 'copy'
                },
                {
                    role: 'paste'
                },
                {
                    title: '关于',
                    role: 'about'
                }
            ]
        },
        // 系统自带的功能
        {
            label: '动作',
            submenu: [
                {
                    label: 'Devtools',
                    role: 'toggleDevTools'
                },
                {
                    role: 'togglefullscreen'
                }
            ]
        },
        // 给子菜单加图标
        {
            label: '其他',
            submenu: [
                {
                    label: '打开',
                    icon: './open.png',
                    accelerator: 'ctrl + o',
                    click() {}
                }
            ]
        },
    
        // 自定义功能
        {
            label: 'Greet',
            click: () => {
                const answers = ['Yes', 'No', 'Maybe', 'xxxx']
                dialog.showMessageBox({
                    title: args || 'Message box',
                    message: args || 'please select an option',
                    detail: 'Message detail',
                    buttons: answers
                }).then((response) => {
                    console.log(response);
                    callback(response)
                })
            },
            // 设置这个点击的快捷键
            accelerator: 'Shift+Alt+G'
        }
    ])
}
const contextMenu = Menu.buildFromTemplate([
    {
        label: 'item 1',
    },
    {
        role: 'editMenu'
    }
])

const winState = new WinState({
    defaultWidth: 800,
    defaultHeight: 600
})

function createWindow () {
    process.env.LANG = 'zh_CN.UTF-8';

    const win = new BrowserWindow({
        // width: 1000,
        // height: 800,
        x: 50,
        y: 50,
        webPreferences: {
            preload: path.resolve(__dirname, 'preload.js'),
            sandbox: false
        },
        ...winState.winOptions,
    })

    win.loadFile('index.html')

    // 管理win窗口
    winState.manage(win)

    const wc = win.webContents;

    // 点击右键时弹窗菜单
    wc.on('context-menu', (e, params) => {
        contextMenu.popup()
    })

    Menu.setApplicationMenu(mainMenu('主进程给 mainMenu 传数据', () => {
        console.log('mainMenu给主进程传输局');
    }))

}


// 动态创建菜单,点击后触发handleAddMenu事件,直接替换启动项目时的菜单栏

const menuItem = new Menu()
const handleAddMenu = () => {
    // 创建菜单
    const menuFile = new MenuItem({label: '文件', type: 'normal'})
    const menuEdit = new MenuItem({label: '编辑', type: 'normal'})
    const customMenu = new MenuItem({label: '自定义菜单栏', submenu: menuItem})

    // 将创建好的自定义菜单添加至 menu
    const menu = new Menu();
    menu.append(menuFile)
    menu.append(menuEdit)
    menu.append(customMenu)

    // 将menu 放置于 app 中显示
    Menu.setApplicationMenu(menu)
}

// 点击按钮后往 自定义菜单栏 添加菜单
const handleAddSubMenu = () => {
    menuItem.append(new MenuItem({label: 'con', type: 'normal'}))
}




原文地址:https://blog.csdn.net/weixin_50236973/article/details/143730408

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!