上一篇: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());