博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用 Electron 创建和管理窗体
阅读量:5939 次
发布时间:2019-06-19

本文共 3732 字,大约阅读时间需要 12 分钟。

使用 Electron 创建和管理窗体

此系列文章的应用示例已发布于 . 可以 Clone 或下载后运行查看. 欢迎 Star .

Electron 中的 BrowserWindow 模块允许您创建新的浏览器窗口或管理现有的浏览器窗口.

每个浏览器窗口都是一个单独的进程, 称为渲染器进程. 这个进程, 像控制应用程序生命周期的主进程一样,可以完全访问 Node.js API.

查看 .

创建一个新窗体

支持: Win, macOS, Linux | 进程: Main

通过 BrowserWindow 模块可以在应用程序中创建新窗口. 这个主进程模块可以和渲染器进程与 remote 模块一起使用, 如本示例中所示.

创建新窗口时有很多参数. 示例中用了一部分, 完整的列表请查看 .

渲染器进程

const BrowserWindow = require('electron').remote.BrowserWindowconst path = require('path')const newWindowBtn = document.getElementById('new-window')newWindowBtn.addEventListener('click', function (event) {  const modalPath = path.join('file://', __dirname, '../../sections/windows/modal.html')  let win = new BrowserWindow({ width: 400, height: 320 })  win.on('close', function () { win = null })  win.loadURL(modalPath)  win.show()})

高级技巧

使用不可见的浏览器窗口来运行后台任务.

您可以将新的浏览器窗口设置为不显示 (即不可见), 以便将该渲染器进程作为 JavaScript 的一种新线程附加在应用程序后台运行. 您可以通过在定义新窗口时将 show 属性设置为 false 来执行此操作.

var win = new BrowserWindow({  width: 400, height: 225, show: false})

管理窗体状态

支持: Win, macOS, Linux | 进程: Main

在这个示例中, 我们创建一个新窗口, 并监听 moveresize 事件. 点击示例按钮, 并更改新窗口大小和位置, 然后在上方查看输出的大小和位置信息.

有很多方法用于控制窗口的状态, 如大小, 位置和焦点状态以及监听窗口更改的事件. 完整的列表请查看 .

渲染器进程

const BrowserWindow = require('electron').remote.BrowserWindowconst path = require('path')const manageWindowBtn = document.getElementById('manage-window')let winmanageWindowBtn.addEventListener('click', function (event) {  const modalPath = path.join('file://', __dirname, '../../sections/windows/manage-modal.html')  win = new BrowserWindow({ width: 400, height: 275 })  win.on('resize', updateReply)  win.on('move', updateReply)  win.on('close', function () { win = null })  win.loadURL(modalPath)  win.show()  function updateReply () {    const manageWindowReply = document.getElementById('manage-window-reply')    const message = `大小: ${win.getSize()} - 位置: ${win.getPosition()}`    manageWindowReply.innerText = message  }})

窗体事件: 获取和失去焦点

支持: Win, macOS, Linux | 进程: Main

在这个示例中, 我们创建一个新窗体并监听它的 blur 事件. 点击示例按钮创建一个新的模态窗体, 然后点击父级窗体来切换焦点. 你可以通过点击 示例获取焦点 按钮来让示例窗体再次获得焦点.

渲染器进程

const BrowserWindow = require('electron').remote.BrowserWindowconst path = require('path')const manageWindowBtn = document.getElementById('listen-to-window')const focusModalBtn = document.getElementById('focus-on-modal-window')let winmanageWindowBtn.addEventListener('click', function () {  const modalPath = path.join('file://', __dirname, '../../sections/windows/modal-toggle-visibility.html')  win = new BrowserWindow({ width: 600, height: 400 })  win.on('focus', hideFocusBtn)  win.on('blur', showFocusBtn)  win.on('close', function () {    hideFocusBtn()    win = null  })  win.loadURL(modalPath)  win.show()  function showFocusBtn (btn) {    if (!win) return    focusModalBtn.classList.add('smooth-appear')    focusModalBtn.classList.remove('disappear')    focusModalBtn.addEventListener('click', function () { win.focus() })  }  function hideFocusBtn () {    focusModalBtn.classList.add('disappear')    focusModalBtn.classList.remove('smooth-appear')  }})

创建一个无框窗体

支持: Win, macOS, Linux | 进程: Main

图片描述

无框窗口就是一个没有 的窗口, 比如工具栏,标题栏,状态栏,边框等. 你可以在创建窗体时通过设置 framefalse 来创建一个无框的窗体.

渲染器进程

const BrowserWindow = require('electron').remote.BrowserWindowconst newWindowBtn = document.getElementById('frameless-window')const path = require('path')newWindowBtn.addEventListener('click', function (event) {  const modalPath = path.join('file://', __dirname, '../../sections/windows/modal.html')  let win = new BrowserWindow({ frame: false })  win.on('close', function () { win = null })  win.loadURL(modalPath)  win.show()})

窗体也可以有一个透明的背景. 通过设置 transparent 参数为 true, 你也可以让你的无框窗口透明:

var win = new BrowserWindow({  transparent: true,  frame: false})

更多内容, 请查阅 .

如果这边文章对您有帮助, 感谢 下方点赞 或 Star 支持, 谢谢.

转载地址:http://nnqtx.baihongyu.com/

你可能感兴趣的文章
Jmeter也能IP欺骗!
查看>>
Rust 阴阳谜题,及纯基于代码的分析与化简
查看>>
ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
查看>>
(原創) array可以使用reference方式傳進function嗎? (C/C++)
查看>>
170多个Ionic Framework学习资源(转载)
查看>>
Azure:不能把同一个certificate同时用于Azure Management和RDP
查看>>
Directx11教程(15) D3D11管线(4)
查看>>
Microsoft Excel软件打开文件出现文件的格式与文件扩展名指定格式不一致?
查看>>
ios ble 参考
查看>>
[转]Pass a ViewBag instance to a HiddenFor field in Razor
查看>>
linux中注册系统服务—service命令的原理通俗
查看>>
基于托管C++的增删改查及异步回调小程序
查看>>
Oracle DBMS_STATS 包 和 Analyze 命令的区别
查看>>
给Visual Studio 2010中文版添加Windows Phone 7模板
查看>>
linux下基本命令
查看>>
windows server 2008R2 上安装配置freesshd
查看>>
手动删除SVCH0ST.EXE的方法
查看>>
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>
Java递归列出所有文件和文件夹
查看>>