Electron:自定义菜单
усилの博客 2022/9/24 Electron
# 在主进程中定义自定义菜单
ipcMain/menu.js
const { Menu } = require("electron");
//https://www.electronjs.org/docs/api/menu-item
var menuTemplate = [
{
label:"文件",
// 二级菜单
submenu:[
{
label:"新建",
// 快捷键
accelerator:"ctrl+n",
// 点击事件
click:()=>{
console.log("Ctrl+N")
}
},
{
label:"打开",
accelerator:"ctrl+o",
click:()=>{
console.log("Ctrl+O")
}
},
{
// 分割线
type:"separator"
},
{
label:"保存"
}
]
},
{
label:"编辑",
submenu:[
{
label:"复制",
// 角色( ctrl+c 是系统默认的,故使用角色来代替)
role:"copy",
click:()=>{
console.log("copy")
}
},
{
label:"黏贴",
role:"paste"
}
]
}
];
var menuBuilder=Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menuBuilder);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
main.js
const createWindow = () => {
//引入menu渲染进程
require('./ipcMain/menu');
}
1
2
3
4
2
3
4
# 点击自定义菜单,主进程给渲染进程发送消息
// ipcMain/menu.js
const { Menu,BrowserWindow } = require("electron");
var menuTemplate = [
{
label:"文件",
submenu:[
{
label:"触发渲染进程里面的方法",
click:()=>{
BrowserWindow.getFocusedWindow().webContents.send("rendererMsg","触发渲染进程里面的方法--我是主进程")
}
},
]
},
];
var menuBuilder = Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menuBuilder);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
渲染进程接收
ipcRenderer.on("rendererMsg",(e,data)=>{
console.log(data) // 触发渲染进程里面的方法--我是主进程
})
1
2
3
2
3