dromara/electron-egg 窗口最小化状态样式定制

dromara/electron-egg 窗口最小化状态样式定制

【免费下载链接】electron-egg A simple, cross platform, enterprise desktop software development framework 【免费下载链接】electron-egg 项目地址: https://gitcode.com/dromara/electron-egg

1. 引言

在桌面应用开发中,窗口最小化状态的样式定制是提升用户体验的重要环节。dromara/electron-egg作为一款简单、跨平台的企业级桌面软件开发框架,提供了灵活的窗口样式定制能力。本文将详细介绍如何在electron-egg框架中定制窗口最小化状态的样式,包括任务栏图标、系统托盘图标以及最小化动画效果等方面的实现方法。

2. 窗口配置基础

electron-egg框架的窗口配置主要集中在electron/config/config.default.js文件中。该文件定义了窗口的基本属性,如标题、尺寸、图标等。

2.1 默认窗口配置

默认窗口配置如下所示:

windowsOption: {
  title: 'electron-egg',
  width: 980,
  height: 650,
  minWidth: 400,
  minHeight: 300,
  webPreferences: {
    contextIsolation: false,
    nodeIntegration: true,
  },
  frame: true,
  show: true,
  icon: path.join(getBaseDir(), 'public', 'images', 'logo-32.png'),
}

在这个配置中,icon属性指定了窗口的图标,该图标也会在窗口最小化到任务栏时显示。默认使用的图标路径为public/images/logo-32.png,如图所示:

默认窗口图标

2.2 自定义任务栏图标

要自定义窗口最小化时显示在任务栏的图标,可以修改windowsOption中的icon属性。例如,将图标修改为public/images/example/ee-win-home.png

icon: path.join(getBaseDir(), 'public', 'images', 'example', 'ee-win-home.png'),

修改后的任务栏图标效果如图所示:

自定义任务栏图标

3. 系统托盘实现

electron-egg框架本身没有直接提供系统托盘的实现,但我们可以通过Electron的API来自定义系统托盘,实现窗口最小化到托盘的功能。

3.1 创建系统托盘

首先,我们需要在应用的生命周期中创建系统托盘。在electron/preload/lifecycle.js文件中,我们可以在ready生命周期函数中添加系统托盘的创建代码:

const { Tray, Menu } = require('electron');

async ready() {
  logger.info('[lifecycle] ready');
  
  // 创建系统托盘
  this.tray = new Tray(path.join(getBaseDir(), 'public', 'images', 'tray.png'));
  
  // 创建托盘菜单
  const contextMenu = Menu.buildFromTemplate([
    { label: '显示窗口', click: () => {
      const win = getMainWindow();
      win.show();
    }},
    { label: '退出应用', click: () => {
      app.quit();
    }}
  ]);
  
  // 设置托盘图标和菜单
  this.tray.setToolTip('electron-egg');
  this.tray.setContextMenu(contextMenu);
  
  // 点击托盘图标显示窗口
  this.tray.on('click', () => {
    const win = getMainWindow();
    win.show();
  });
}

系统托盘图标使用的是public/images/tray.png文件,如图所示:

系统托盘图标

3.2 窗口最小化到托盘

要实现窗口最小化到托盘的功能,我们需要监听窗口的minimize事件,并在事件处理函数中隐藏窗口并显示托盘图标:

async windowReady() {
  logger.info('[lifecycle] window-ready');
  
  const win = getMainWindow();
  
  // 监听窗口最小化事件
  win.on('minimize', (event) => {
    event.preventDefault(); // 阻止窗口默认的最小化行为
    win.hide(); // 隐藏窗口
    this.tray.show(); // 显示托盘图标
  });
  
  // 延迟加载,无白屏
  const { windowsOption } = getConfig();
  if (windowsOption.show == false) {
    win.once('ready-to-show', () => {
      win.show();
      win.focus();
    })
  }
}

4. 最小化动画效果

electron-egg框架默认没有提供窗口最小化的动画效果,但我们可以通过前端CSS和Electron的窗口事件来实现自定义的最小化动画。

4.1 添加CSS动画

在前端项目的全局样式文件frontend/src/assets/global.less中,添加窗口最小化动画的CSS样式:

/* 窗口最小化动画 */
.minimize-animation {
  animation: minimize 0.3s ease-out forwards;
}

@keyframes minimize {
  from {
    transform: scale(1);
    opacity: 1;
  }
  to {
    transform: scale(0.8);
    opacity: 0;
  }
}

4.2 触发最小化动画

在前端页面中,我们可以通过IPC通信来触发窗口最小化事件,并添加动画效果。首先,在frontend/src/utils/ipcRenderer.js中添加最小化窗口的IPC调用:

// 最小化窗口
export const minimizeWindow = () => {
  return ipcRenderer.invoke('window-minimize');
};

然后,在主进程中注册window-minimize事件的处理函数,在electron/main.js中添加:

// 注册窗口最小化事件
app.register('window-minimize', () => {
  const win = getMainWindow();
  // 添加动画类
  win.webContents.send('add-minimize-animation');
  // 延迟执行最小化
  setTimeout(() => {
    win.minimize();
  }, 300);
});

最后,在前端页面中监听add-minimize-animation事件,添加动画类:

// 在需要最小化的组件中
ipcRenderer.on('add-minimize-animation', () => {
  document.body.classList.add('minimize-animation');
  
  // 动画结束后移除类
  setTimeout(() => {
    document.body.classList.remove('minimize-animation');
  }, 300);
});

5. 跨平台适配

electron-egg框架支持跨平台开发,我们需要考虑在不同操作系统上窗口最小化样式的差异。

5.1 Windows平台

在Windows平台上,窗口最小化默认会显示在任务栏中。我们可以通过修改任务栏图标的方式来自定义最小化样式,如第2.2节所述。Windows平台的窗口效果如图所示:

Windows窗口效果

5.2 macOS平台

在macOS平台上,窗口最小化会显示在Dock中。我们可以通过修改Info.plist文件来自定义Dock图标。在打包配置文件cmd/builder-mac.json中,可以指定Dock图标的路径:

{
  "appId": "com.electron.egg",
  "productName": "electron-egg",
  "icon": "public/images/example/ee-mac-home.png",
  // 其他配置...
}

macOS平台的Dock图标效果如图所示:

macOS Dock图标

5.3 Linux平台

在Linux平台上,窗口最小化的行为取决于桌面环境。通常情况下,窗口会最小化到任务栏或活动栏中。我们可以通过修改窗口图标来实现自定义效果,如第2.2节所述。Linux平台的窗口效果如图所示:

Linux窗口效果

6. 完整实现流程

下面是窗口最小化状态样式定制的完整实现流程:

mermaid

通过以上步骤,我们可以完成electron-egg框架中窗口最小化状态样式的定制,包括任务栏图标、系统托盘和最小化动画等效果。

7. 总结与扩展

本文详细介绍了如何在dromara/electron-egg框架中定制窗口最小化状态的样式,包括修改任务栏图标、实现系统托盘、添加最小化动画以及跨平台适配等内容。通过这些定制,可以提升应用的用户体验,使应用更加符合企业级桌面软件的需求。

除了本文介绍的内容,还可以进一步扩展:

  1. 实现窗口最小化时的自定义通知
  2. 添加托盘图标的闪烁效果
  3. 自定义窗口最小化时的缩略图

更多关于electron-egg框架的使用,可以参考官方文档:README.mdREADME.zh-CN.md

希望本文能够帮助开发者更好地定制electron-egg应用的窗口最小化样式,打造更加专业的企业级桌面应用。

【免费下载链接】electron-egg A simple, cross platform, enterprise desktop software development framework 【免费下载链接】electron-egg 项目地址: https://gitcode.com/dromara/electron-egg

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值