上一篇:electron+vue製做桌面應用--自定義標題欄中咱們介紹瞭如何使用electon製做自定義樣式的標題欄
接下來,咱們介紹一下標題欄上的最大化、最小化和關閉按鈕如何實現vue
首先查閱electron文檔BrowserWindow部分,咱們發現electron已經準備好win.close()、win.maximize()和win.minimize()三個方法供咱們調用了。web
那麼問題來了,個人渲染進程獲取到了點擊事件,如何到主進程中調用對應的方法呢?segmentfault
這裏有兩種方法,一種是使用ipc,另外一種是使用romate
這裏先介紹下ipc
新建組件Titlebtn,'src\renderer\components\mytitle\Titlebtn.vue'api
<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組件,以下app
<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,監聽渲染進程的消息,並根據消息執行相應的動做electron
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());