electron 教程【7】如何实现自定义应用程序菜单,和右键菜单

本文介绍如何使用Electron框架自定义应用程序菜单及右键菜单,包括实现步骤与代码示例,帮助开发者快速掌握定制技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现自定义应用程序菜单

基本思路:自定义应用程序菜单,然后将该菜单设置到对应的window上。

如何操作:Menu和MenuItem模块分别对应菜单,和菜单的内容。可以直接在主进程中调用,也可以在渲染进程中通过remote模块调用。

一个示例:

const electron = require('electron')
const BrowserWindow = electron.BrowserWindow
const Menu = electron.Menu
const app = electron.app

var template = [{
  label: '编辑',
  submenu: [{
    label: '撤销',
    accelerator: 'CmdOrCtrl+Z',
    role: 'undo'
  }, {
    label: '重做',
    accelerator: 'Shift+CmdOrCtrl+Z',
    role: 'redo'
  }, {
    type: 'separator'
  }, {
    label: '复制',
    accelerator: 'CmdOrCtrl+C',
    role: 'copy'
  }, {
    label: '粘贴',
    accelerator: 'CmdOrCtrl+V',
    role: 'paste'
  }]
}, {
  label: '帮助',
  role: 'help',
  submenu: [{
    label: '学习更多',
    click: function () {
      electron.shell.openExternal('http://electron.atom.io')
    }
  }]
}];

function createWindow () {
  // Create the browser window.
  mainWindow = new BrowserWindow({width: 800, height: 600})
  // Set menu to window
  const menu = Menu.buildFromTemplate(template)
  Menu.setApplicationMenu(menu)
}

app.on('ready', createWindow)

// Quit when all windows are closed.
app.on('window-all-closed', function () {
  // On OS X it is common for applications and their menu bar
  // to stay active until the user quits explicitly with Cmd + Q
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', function () {
  // On OS X it's common to re-create a window in the app when the
  // dock icon is clicked and there are no other windows open.
  if (mainWindow === null) {
    createWindow()
  }
})

一、实现右键菜单

基本思路:自定义右键菜单内容,然后在按下鼠标右键时,在渲染进程中发送信号,在主进程中显示右键菜单。

如何操作:Menu和MenuItem模块分别对应菜单,和菜单的内容。可以直接在主进程中调用,也可以在渲染进程中通过remote模块调用。

一个示例:

渲染进程:

			$('body').mouseup(
				(event) => {
					var e = event || window.event;
					let nType = e.button;
					if (2 === nType) {
						showRightClickMenu();
					}
					e.stopPropagation();
				}
			);

function showRightClickMenu(){
	ipcRenderer.send('sigShowRightClickMenu');
}

主进程:

ipcMain.on('sigShowRightClickMenu', (event) => {
	//! 生成菜单
	const menu = new Menu();
	menu.append(new MenuItem({ label: 'Hello world' }));
	menu.append(new MenuItem({ type: 'separator' }));
	menu.append(new MenuItem({ label: 'Electron', click: () => {
				Electron.shell.openExternal('https://www.baidu.com');
			}
		})
	);
	const win = BrowserWindow.fromWebContents(event.sender);
	menu.popup(win);
});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值