electron+vue製做桌面應用--自定義標題欄最大/小化和關閉

上一篇: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());
相關文章
相關標籤/搜索