You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron中如何检测窗口最大化事件

无轮询实现窗口最大化时自动切换最大化图标方案

所有触发窗口最大化的操作——不管是双击标题栏、拖拽窗口到屏幕顶部吸附、点击最大化按钮、用系统快捷键触发最大化——本质都是修改窗口的显示状态,这类状态变更都是事件驱动的,UI框架/系统会在状态切换完成的瞬间主动抛出对应事件,直接监听事件处理即可,完全不需要轮询调用isMaximized()。

轮询是最次的实现方案,不仅浪费性能,还存在状态更新延迟的问题,事件监听是这类场景的标准实现方式。

常见技术栈具体实现

  • Electron
    直接监听BrowserWindow实例自带的maximize、unmaximize事件,两个事件分别对应窗口进入最大化、退出最大化的时机,覆盖所有最大化触发路径:
    // 窗口初始化完成后绑定事件即可
    mainWindow.on('maximize', () => {
      // 替换按钮图标为还原样式
      maximizeButton.setIcon(iconRestore)
    })
    
    mainWindow.on('unmaximize', () => {
      // 替换按钮图标为普通最大化样式
      maximizeButton.setIcon(iconMaximize)
    })
    
  • WPF
    监听窗口的StateChanged事件,在回调中判断当前窗口状态后切换图标:
    public MainWindow()
    {
        InitializeComponent();
        this.StateChanged += (_, _) =>
        {
            MaximizeBtn.Icon = this.WindowState == WindowState.Maximized 
                ? Properties.Resources.Restore 
                : Properties.Resources.Maximize;
        };
    }
    
  • Qt
    重写窗口的changeEvent方法,捕获窗口状态变更事件处理即可:
    void MainWindow::changeEvent(QEvent *e)
    {
        if (e->type() == QEvent::WindowStateChange) {
            ui->maximizeBtn->setIcon(isMaximized() ? restoreIcon : maximizeIcon);
        }
        QMainWindow::changeEvent(e);
    }
    
  • 原生Win32
    在窗口过程函数中处理WM_SIZE消息,当wParam为SIZE_MAXIMIZED时切换为还原图标,wParam为SIZE_RESTORED时切回最大化图标即可。

补充说明:以上事件都是状态实际生效后才会触发,不存在漏判、误判问题,事件触发的时机和窗口实际显示状态完全同步。

内容的提问来源于stack exchange,提问作者BBB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:03:25