监听electron 双击屏幕最大化时设置右上角图片变化

本文介绍在Electron中实现窗口最大化与最小化的具体方法,并探讨如何解决最大化与最小化功能中存在的问题,例如设置不可最大化属性无效及窗口状态同步等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在electron实现窗口最大化和最小化的时候,是很简单的,只要设置主线程最大化和最小化就行了

最大化与最小化设定

// 主线程最大化
mainWin.maximize()
//主线程非最大化
 mainWin.unmaximize()
// 主线程最小化
mainWin.hide()

但是在实际执行的时候,却有很多坑比如
1、你设置了 不可以双击最大化,但是只要你拖动窗口,你设置的不可以双击最大/小化 就失效了
2、如果不监听 屏幕变化,右上角的图标就不会变化,最大化后仍显示最大化图标

//设置不可最大化属性,其实没什么用 随便拖动一下窗口,就可以双击最大化
win = new BrowserWindow({
    width: 1000,
    height: 580,
    frame: false, ///无边框
    maximizable: false, // 默认不能最大化
    resizable: false,
    minWidth: 1000,
    minHeight: 580,
  })

判断窗口是否最大化

首先想到的是判断一下是否最大化,通过文档找到查看是否最大化的函数

//判断窗口最大化的函数
win.isMaximized()

但是,当我们最大化、全屏之后,这个函数都会返回true,这样处理显然是不正确的

监听窗口最大化与非最大化变化

这时候能做的就是在主线程里监听最大化状态,然后做出相应的处理
1、主线程监听

//监听窗口最大化、最小化事件 --- 主进程
  win.on('maximize', () => {
    win.webContents.send('mainWin-max', true)
  })
  win.on('unmaximize', () => {
    win.webContents.send('mainWin-max', false)
  })

2、渲染进程接收函数
渲染进程收到事件通知执行改变窗口显示状态值的函数

//渲染进程接收函数
ipcRenderer.on('mainWin-max', (_, status) => {
    store.commit('changeSize', status)
})

3、子页面获取窗口状态值,从而改变最大化与非最大化图标

computed:{
        ...mapGetters({
            isMax: "sizeVal"
        }),
    },

页面控制图标显隐

<div class="win" @click.stop="clickMax">
          <img v-if="!isMax" src="../images/sizeMin.png" alt="">
          <img v-else src="../images/sizeMax.png" alt="">
      </div>
### 实现页面关闭事件监听 为了在 Electron 应用程序中监听并处理窗口右上角的关闭按钮点击事件,可以采用 `mainWindow.on('close')` 方法。此方法允许开发者在浏览器窗口 API 上捕捉到 “close” 事件,并在此基础上编写自定义逻辑[^3]。 下面是一段 JavaScript 代码示例: ```javascript const { BrowserWindow, app } = require('electron'); let mainWindow; function createWindow() { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }); mainWindow.loadURL(`file://${__dirname}/index.html`); // 监听 close 事件 mainWindow.on('close', (event) => { // 自定义逻辑写在这里 console.log("尝试关闭窗口"); // 如果需要阻止默认行为(即不真正关闭) // 可以调用 event.preventDefault() // 这里假设我们总是希望执行默认行为 // 所以不需要调用 preventDefault() // 关闭前保存数据或其他清理工作可放在这儿 // 让关闭继续发生 mainWindow = null; }); } app.on('ready', createWindow); ``` 这段代码展示了如何创建一个主窗口实例 (`mainWindow`) 并为其设置了一个 ‘close’ 事件处理器。每当用户试图通过点击右上角的 X 按钮来关闭窗口,都会触发这个回调函数,在这里可以根据需求加入任何必要的业务逻辑。 需要注意的是,上述方式仅适用于单独某个特定窗口;对于整个应用程序级别的全局控制,则应该考虑使用 `before-quit` 或者 `will-quit` 等更高层次的应用生命周期管理事件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值