HarmonyOS PC electron上子窗和悬浮窗如何创建?

在HarmonyOS PC上使用electron框架开发应用,如何创建子窗和悬浮窗?

【背景知识】 子窗分为(1)常规子窗(2)悬浮窗。 子窗有多种用途,如弹出模态对话框,用于显示额外信息/提示,或者广告等。 悬浮窗是HarmonyOS特有的窗口形式,其特点如下:

  1. 仅在2in1和PC设备上可申请,场景限定为"多人视频通话"和"屏幕共享"。

  2. 通过申请受限权限申请,审批相对严格。

  3. 相比于常规子窗,悬浮窗是一个始终在前台显示的窗口。即使创建悬浮窗的任务退至后台,悬浮窗仍然可以在前台显示。通常悬浮窗位于所有应用窗口之上,开发者可以创建悬浮窗,并对悬浮窗进行属性设置等操作。常规子窗不具备以上特性。

【解决方案】

  1. 创建常规子窗。

// main.js
const { app, BrowserWindow, ipcMain } = require('electron/main');
const { truncate } = require('original-fs');
let win;
​
const createWindow = () => {
  win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
        nodeIntegration: true,
        contextIsolation: false
    }
  })
​
  win.setWindowButtonVisibility(true);
  win.loadFile('index.html')
}
​
app.whenReady().then(() => {
  createWindow();
​
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow();
    }
  })
})
​
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
})
​
ipcMain.on('create-new-window', (event) => {
​
  const newWindow = new BrowserWindow({
    windowInfo: {
        // type的取值是mainWindow,subWindow,floatWindow
        // 创建常规子窗,同时parent应设置为父窗口引用
        type: 'subWindow'
    },
    width: 400,
    height: 300,
    parent: win,
    icon: 'electron_white.png'
  });
​
  newWindow.loadFile('sub.html')
});

img

  1. 创建悬浮窗。

仅修改创建子窗的参数即可,windowInfo.type修改为floatWindow,样例如下。

const newWindow = new BrowserWindow({
  windowInfo: {
        // type的取值是mainWindow,subWindow,floatWindow
        // 创建floatWindow,同时parent应设置为父窗口引用
      type: 'floatWindow'
  },
  width: 400,
  height: 300,
  parent: win,
  icon: 'electron_white.png'
});

img

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐