上一篇 多視窗應用的實作與視窗管理 (理論篇) 提到了如何開發多視窗的功能,在進行實作的範例之前,筆者先帶大家看一下 Electron 提供的視窗 API 功能,介紹完後我們會基於 React 與 Electron 的整合:打造動態的用戶界面,將計時器加入多視窗的功能~
在 Electron 應用中,視窗管理 是開發桌面應用的核心環節之一。Electron 提供了豐富的視窗相關 API,讓開發者能夠靈活地創建、管理和控制視窗的行為與外觀。這篇文章將帶讀者全面了解這些 API,幫助讀者在開發多視窗應用時更加得心應手。
想了解詳細的說明可以參考官方文件
BrowserWindow 是 Electron 中創建和管理視窗的核心類。每個視窗都是 BrowserWindow 的物件。以下是一些常用的 BrowserWindow API:
要創建視窗,你需要使用 new BrowserWindow(options) 來創建一個新視窗
const { BrowserWindow } = require('electron');
let mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false,
contextIsolation: true,
},
});
這個 API 接受一個配置物件,允許你設置視窗的寬高、邊框、透明度等屬性。常用的選項包括:
視窗創建後,你需要為其載入網頁內容,這可以是本地文件,也可以是遠端的 URL。
mainWindow.loadFile('index.html'); // 載入本地 HTML 文件
mainWindow.loadURL('https://example.com'); // 或者載入 URL
BrowserWindow 提供了多個 API 來獲取視窗的狀態和屬性。
const bounds = mainWindow.getBounds();
console.log(bounds); // { x: 100, y: 200, width: 800, height: 600 }
const [x, y] = mainWindow.getPosition();
const [width, height] = mainWindow.getSize();
const focused = mainWindow.isFocused();
const visible = mainWindow.isVisible();
上一篇文章 多視窗應用的實作與視窗管理 (理論篇) 也有提到部分的 API 功能
mainWindow.show();
mainWindow.hide();
mainWindow.minimize();
mainWindow.maximize();
mainWindow.restore();
mainWindow.setFullScreen(true); // 啟動全螢幕
mainWindow.setFullScreen(false); // 退出全螢幕
const isMinimized = mainWindow.isMinimized();
mainWindow.close();
注意,當調用 close() 時,會觸發視窗的 close 事件。如果想在關閉前進行額外的操作,可以攔截這個事件
mainWindow.on('close', (event) => {
event.preventDefault(); // 防止視窗被關閉
console.log('視窗關閉事件已觸發');
});
mainWindow.destroy();
mainWindow.setBounds({ x: 200, y: 200, width: 1024, height: 768 });
mainWindow.setPosition(100, 100);
mainWindow.setSize(1280, 720);
mainWindow.center();
mainWindow.setMinimumSize(400, 300);
mainWindow.setMaximumSize(1600, 1200);
在某些場景下,我們可能需要無邊框視窗(例如自定義樣式的應用)或透明視窗(例如桌面小工具)
let framelessWindow = new BrowserWindow({
width: 800,
height: 600,
frame: false,
});
let transparentWindow = new BrowserWindow({
width: 800,
height: 600,
transparent: true,
frame: false, // 通常無邊框視窗會與透明視窗結合使用
});
mainWindow.setAlwaysOnTop(true); // 設置視窗總是在最前
mainWindow.setAlwaysOnTop(false); // 取消置頂
mainWindow.setAlwaysOnTop(true, 'screen-saver'); // 設置在螢幕保護程式上方
const allWindows = BrowserWindow.getAllWindows();
console.log(allWindows); // 列出所有視窗
const focusedWindow = BrowserWindow.getFocusedWindow();
const { screen } = require('electron');
const primaryDisplay = screen.getPrimaryDisplay();
console.log(primaryDisplay);
const displays = screen.getAllDisplays();
Electron 提供了強大且豐富的 視窗 API,這些 API 讓開發者能夠全面控制視窗的行為、外觀和狀態。從基礎的視窗創建與控制,到進階的無邊框、透明視窗,以及視窗之間的通信與多顯示器管理,這些工具為開發靈活的多視窗應用提供了充足的支持。
通過靈活運用這些 API,你可以創建功能豐富且靈活的多視窗桌面應用,滿足各種場景的需求。掌握這些 API 是開發 Electron 程式的基礎,也是提升使用者體驗的關鍵。