摘要:使用自定義菜單此系列文章的應(yīng)用示例已發(fā)布于可以或下載后運行查看歡迎使用和模塊可用于創(chuàng)建自定義本地菜單有兩種菜單應(yīng)用程序頂部菜單和上下文右鍵單擊菜單在瀏覽器中打開完整的文檔創(chuàng)建應(yīng)用程序菜單支持進(jìn)程使用和模塊可以自定義你的應(yīng)用程序菜單如果
使用 Electron 自定義菜單
此系列文章的應(yīng)用示例已發(fā)布于 GitHub: electron-api-demos-Zh_CN. 可以 Clone 或下載后運行查看. 歡迎 Star .
使用 Menu 和 MenuItem 模塊可用于創(chuàng)建自定義本地菜單.
有兩種菜單: 應(yīng)用程序(頂部)菜單和上下文(右鍵單擊)菜單.
在瀏覽器中打開 完整的 API 文檔 .
創(chuàng)建應(yīng)用程序菜單支持: Win, macOS, Linux | 進(jìn)程: Main
使用 Menu 和 MenuItem 模塊可以自定義你的應(yīng)用程序菜單. 如果沒有設(shè)置任何菜單, Electron 將為您的應(yīng)用默認(rèn)生成一個最小的菜單.
此應(yīng)用程序使用下面的代碼設(shè)置應(yīng)用程序菜單. 如果您點擊應(yīng)用程序菜單中的 "查看" 選項, 然后點擊 "應(yīng)用程序菜單演示", 則會顯示一個信息框.
主進(jìn)程
const electron = require("electron") const BrowserWindow = electron.BrowserWindow const Menu = electron.Menu const app = electron.app let template = [{ label: "編輯", submenu: [{ label: "撤銷", accelerator: "CmdOrCtrl+Z", role: "undo" }, { label: "重做", accelerator: "Shift+CmdOrCtrl+Z", role: "redo" }, { type: "separator" }, { label: "剪切", accelerator: "CmdOrCtrl+X", role: "cut" }, { label: "復(fù)制", accelerator: "CmdOrCtrl+C", role: "copy" }, { label: "粘貼", accelerator: "CmdOrCtrl+V", role: "paste" }, { label: "全選", accelerator: "CmdOrCtrl+A", role: "selectall" }] }, { label: "查看", submenu: [{ label: "重載", accelerator: "CmdOrCtrl+R", click: function (item, focusedWindow) { if (focusedWindow) { // 重載之后, 刷新并關(guān)閉所有的次要窗體 if (focusedWindow.id === 1) { BrowserWindow.getAllWindows().forEach(function (win) { if (win.id > 1) { win.close() } }) } focusedWindow.reload() } } }, { label: "切換全屏", accelerator: (function () { if (process.platform === "darwin") { return "Ctrl+Command+F" } else { return "F11" } })(), click: function (item, focusedWindow) { if (focusedWindow) { focusedWindow.setFullScreen(!focusedWindow.isFullScreen()) } } }, { label: "切換開發(fā)者工具", accelerator: (function () { if (process.platform === "darwin") { return "Alt+Command+I" } else { return "Ctrl+Shift+I" } })(), click: function (item, focusedWindow) { if (focusedWindow) { focusedWindow.toggleDevTools() } } }, { type: "separator" }, { label: "應(yīng)用程序菜單演示", click: function (item, focusedWindow) { if (focusedWindow) { const options = { type: "info", title: "應(yīng)用程序菜單演示", buttons: ["好的"], message: "此演示用于 "菜單" 部分, 展示如何在應(yīng)用程序菜單中創(chuàng)建可點擊的菜單項." } electron.dialog.showMessageBox(focusedWindow, options, function () {}) } } }] }, { label: "窗口", role: "window", submenu: [{ label: "最小化", accelerator: "CmdOrCtrl+M", role: "minimize" }, { label: "關(guān)閉", accelerator: "CmdOrCtrl+W", role: "close" }, { type: "separator" }, { label: "重新打開窗口", accelerator: "CmdOrCtrl+Shift+T", enabled: false, key: "reopenMenuItem", click: function () { app.emit("activate") } }] }, { label: "幫助", role: "help", submenu: [{ label: "學(xué)習(xí)更多", click: function () { electron.shell.openExternal("http://electron.atom.io") } }] }] function addUpdateMenuItems (items, position) { if (process.mas) return const version = electron.app.getVersion() let updateItems = [{ label: `Version ${version}`, enabled: false }, { label: "正在檢查更新", enabled: false, key: "checkingForUpdate" }, { label: "檢查更新", visible: false, key: "checkForUpdate", click: function () { require("electron").autoUpdater.checkForUpdates() } }, { label: "重啟并安裝更新", enabled: true, visible: false, key: "restartToUpdate", click: function () { require("electron").autoUpdater.quitAndInstall() } }] items.splice.apply(items, [position, 0].concat(updateItems)) } function findReopenMenuItem () { const menu = Menu.getApplicationMenu() if (!menu) return let reopenMenuItem menu.items.forEach(function (item) { if (item.submenu) { item.submenu.items.forEach(function (item) { if (item.key === "reopenMenuItem") { reopenMenuItem = item } }) } }) return reopenMenuItem } if (process.platform === "darwin") { const name = electron.app.getName() template.unshift({ label: name, submenu: [{ label: `關(guān)于 ${name}`, role: "about" }, { type: "separator" }, { label: "服務(wù)", role: "services", submenu: [] }, { type: "separator" }, { label: `隱藏 ${name}`, accelerator: "Command+H", role: "hide" }, { label: "隱藏其它", accelerator: "Command+Alt+H", role: "hideothers" }, { label: "顯示全部", role: "unhide" }, { type: "separator" }, { label: "退出", accelerator: "Command+Q", click: function () { app.quit() } }] }) // 窗口菜單. template[3].submenu.push({ type: "separator" }, { label: "前置所有", role: "front" }) addUpdateMenuItems(template[0].submenu, 1) } if (process.platform === "win32") { const helpMenu = template[template.length - 1].submenu addUpdateMenuItems(helpMenu, 0) } app.on("ready", function () { const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) }) app.on("browser-window-created", function () { let reopenMenuItem = findReopenMenuItem() if (reopenMenuItem) reopenMenuItem.enabled = false }) app.on("window-all-closed", function () { let reopenMenuItem = findReopenMenuItem() if (reopenMenuItem) reopenMenuItem.enabled = true })高級技巧
了解操作系統(tǒng)菜單的差異.
在為多個操作系統(tǒng)設(shè)計應(yīng)用程序時, 請務(wù)必注意應(yīng)用程序菜單在每個操作系統(tǒng)上的不同約定之處。
例如, 在 Windows 上, 加速器設(shè)置為 & . 命名約定也有所不同, 如 "設(shè)置" 或 "首選項". 下面是學(xué)習(xí)操作系統(tǒng)特定標(biāo)準(zhǔn)的資源:
macOS
Windows.aspx)
Linux
創(chuàng)建上下文菜單支持: Win, macOS, Linux | 進(jìn)程: Main
可以使用 Menu 和 MenuItem 模塊創(chuàng)建上下文或右鍵單擊菜單. 您可以右鍵單擊此應(yīng)用程序中的任何位置, 或單擊示例按鈕以查看示例上下文菜單.
在這個示例中, 我們使用 ipcRenderer 模塊來展示從渲染器進(jìn)程顯式調(diào)用它時的上下文菜單.
有關(guān)所有可用的屬性請查看 上下文菜單事件文檔 .
主進(jìn)程
const electron = require("electron") const BrowserWindow = electron.BrowserWindow const Menu = electron.Menu const MenuItem = electron.MenuItem const ipc = electron.ipcMain const app = electron.app const menu = new Menu() menu.append(new MenuItem({ label: "Hello" })) menu.append(new MenuItem({ type: "separator" })) menu.append(new MenuItem({ label: "Electron", type: "checkbox", checked: true })) app.on("browser-window-created", function (event, win) { win.webContents.on("context-menu", function (e, params) { menu.popup(win, params.x, params.y) }) }) ipc.on("show-context-menu", function (event) { const win = BrowserWindow.fromWebContents(event.sender) menu.popup(win) })
渲染器進(jìn)程
const ipc = require("electron").ipcRenderer // 告訴主進(jìn)程在單擊示例按鈕時顯示菜單 const contextMenuBtn = document.getElementById("context-menu") contextMenuBtn.addEventListener("click", function () { ipc.send("show-context-menu") })
如果這邊文章對您有幫助, 感謝 下方點贊 或 Star GitHub: electron-api-demos-Zh_CN 支持, 謝謝.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81719.html
摘要:本文主要講解的入門。可以幫助我們管理包的下載依賴部署發(fā)布等。可以認(rèn)為是中的。后續(xù)使用中,全部替換為即可。命令根據(jù)它,自動下載所需模塊用于創(chuàng)建窗口和處理系統(tǒng)事件安裝包的位置。 Electron是什么 可以認(rèn)為Electron是一種運行環(huán)境庫,我們可以基于此,用HTML、JS和CSS寫桌面應(yīng)用。PC端的UI交互,主要有web應(yīng)用和桌面應(yīng)用。具體采用哪種方式,主要看系統(tǒng)的應(yīng)用場景,哪個更合適...
摘要:讀取文件路徑寫入配置文件調(diào)用服務(wù)調(diào)用服務(wù)部分,主要用到的子進(jìn)程。最后,上一張初步完成之后的運行圖博客原文 背景 部門的項目每次開發(fā)都需要手動開啟三個服務(wù):server、webpack、grunt,每個服務(wù)都要輸入一些東西(端口號,項目命,項目類型,啟動器名)。而且,在推送調(diào)試的時候,這三項服務(wù)非常容易被終止掉,然后又得一個個開起來,總之每天都要來上那么10幾遍吧。看圖:showImg(...
摘要:將剪切板中的數(shù)據(jù)轉(zhuǎn)換為然后暫存到本地,通過本地文件的方式來進(jìn)行上傳七牛。以上,就是開發(fā)一個插件的完整流程咯。 最近用Atom寫博客比較多,然后發(fā)現(xiàn)一個很嚴(yán)重的問題。。沒有一個我想要的上傳圖片的方式,比如某乎上邊就可以直接copy/paste文件,然后進(jìn)行上傳。然而在Atom上沒有找到類似的插件,最接近的一個,也還是需要手動選擇文件,然后進(jìn)行上傳。這個操作流程太繁瑣,索性自己寫一個插件用...
摘要:在菜單中,我想點擊子菜單打開一個網(wǎng)站,那么就可以用到方法,則會在默認(rèn)瀏覽器中打開打包應(yīng)用其實將程序打包成桌面應(yīng)用才是比較麻煩的事。 前言 Electron 是一個搭建跨平臺桌面應(yīng)用的框架,僅僅使用 JavaScript、HTML 以及 CSS,即可快速而容易地搭建一個原生應(yīng)用。這對于想要涉及其他領(lǐng)域的開發(fā)者來說是一個非常大的福利。 項目介紹 倉庫地址:lin-xin/calculato...
閱讀 2005·2023-04-25 16:53
閱讀 1446·2021-10-13 09:39
閱讀 611·2021-09-08 09:35
閱讀 1646·2019-08-30 13:03
閱讀 2126·2019-08-30 11:06
閱讀 1835·2019-08-30 10:59
閱讀 3194·2019-08-29 17:00
閱讀 2293·2019-08-23 17:55