上一篇:electron+vue制作桌面应用--自定义标题栏中我们介绍了如何使用electon制作自定义样式的标题栏
接下来,我们介绍一下标题栏上的最大化、最小化和关闭按钮如何实现
首先查阅electron文档BrowserWindow部分,我们发现electron已经准备好win.close()、win.maximize()和win.minimize()三个方法供我们调用了。
那么问题来了,我的渲染进程获取到了点击事件,如何到主进程中调用对应的方法呢?
这里有两种方法,一种是使用ipc,另一种是使用romate
这里先介绍下ipc
新建组件Titlebtn,'src\renderer\components\mytitle\Titlebtn.vue'
<template>
<div
class="titlebtn"
v-bind:style="style"
v-on:click="click"/>
</template>
<script>
const {ipcRenderer: ipc} = require('electron');
const style = {
min: {
backgroundColor: 'green',
right: '100px'
},
max: {
backgroundColor: 'yellow',
right: '60px'
},
close: {
backgroundColor: 'black',
right: '20px'
}
};
export default {
name: 'Titlebtn',
props: ['type'],
computed: {
style: function () {
return style[this.type];
}
},
methods: {
click: function () {
ipc.send(this.type);
}
}
}
</script>
<style>
.titlebtn {
position: absolute;
width: 20px;
height: 20px;
top: 0;
bottom: 0;
margin: auto 0;
-webkit-app-region: no-drag;
}
</style>
这里需要注意一下,因为之前我们设置标题栏样式-webkit-app-region: drag,这里按钮必须设置样式-webkit-app-region: no-drag,不然按钮将无法选中或点击
鼠标点击按钮后,通过ipcRenderer向主进程发送消息
然后修改我们的Titlebtn组件,如下
<template>
<div id="mytitle">
<Titlebtn type="min" />
<Titlebtn type="max" />
<Titlebtn type="close" />
</div>
</template>
<script>
import Titlebtn from './Titlebtn.vue';
export default {
name: 'Mytitle',
components: {
Titlebtn
}
}
</script>
<style>
#mytitle {
position: absolute;
width: 100%;
height: 52px;
background-color: rgb(198, 47, 47);
-webkit-app-region: drag;
}
</style>
修改主进程index.js,监听渲染进程的消息,并根据消息执行相应的动作
import { ipcMain } from 'electron'
ipcMain.on('min', e=> mainWindow.minimize());
ipcMain.on('max', e=> {
if (mainWindow.isMaximized()) {
mainWindow.unmaximize()
} else {
mainWindow.maximize()
}
});
ipcMain.on('close', e=> mainWindow.close());