javascript - 如何为 Electron 中的特定窗口制作单独的菜单?

标签 javascript windows electron menubar titlebar

我正在 Windows 上开发一个关于此应用程序的窗口,我想为我的关于窗口制作一个自定义菜单栏。由于我已经有一个自定义菜单,有没有办法可以创建另一个菜单并将其仅应用于该特定窗口?

旁注: 这是我的新窗口代码,应该阻止它被调整并进入全屏,但由于某种原因,最小化和放大按钮仍然有效。

app.on('ready', createWindow);
electron.app.on('ready', () => {
  //Triger update check
  if (!isDev) {
    autoUpdater.checkForUpdates();
  }
})

function createWindow(){
  //create brower window
  win = new BrowserWindow({
  backgroundColor: '#2e2c29',
  width: 800,
  height: 600,
  //transparent: true,
  frame: false,
  titleBarStyle: 'hidden',
  backgroundColor: '#0000',
  webPreferences: {
    nodeIntegration: true
}
  });


//Quit when all windows are closed
  app.on('window-all-closed', () => {
    app.quit()
  })

app.once('ready', function() {

const template = [
  {
    label: 'File',
    submenu: [
      {
          label: 'About Hubris',
          click: () =>
          openAboutWindow()
          },
      { type: 'separator' },
      { role: 'hide' },
      { role: 'hideothers' },
      { role: 'unhide' },
      { type: 'separator' },
      { role: 'quit' }
    ]
  },
  {
label: 'View',
submenu: [

  { role: 'minimize' },
  { role: 'zoom' },
  { type: 'separator' },
  { role: 'togglefullscreen' }
    ]
  },
]

const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)



//here is the code for the about window
var newWindow = null

function openAboutWindow() {

  if (newWindow) {
    newWindow.focus()
    return
  }

  newWindow = new BrowserWindow({
    height: 439,
    resizable: false,
    width: 599,
    title: 'About Hubris',
    minimizable: false,
    fullscreenable: false,
    frame: false,
    titleBarStyle: 'hidden',

  })

  newWindow.loadURL('file://' + __dirname + '/about-this-app.html')

  newWindow.on('closed', function() {
    newWindow = null
  })
}
});

最佳答案

您可以即时切换菜单。我有一个具有“编辑器”和“演示”模式的应用程序。我为每种模式创建并存储一个菜单(它们有不同的菜单项):

let editorMenu = Menu.buildFromTemplate(menuTemplate);

并订阅相关的窗口事件(焦点、模糊等)。然后当窗口获得焦点时

Menu.setApplicationMenu(editorMenu);

关于javascript - 如何为 Electron 中的特定窗口制作单独的菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044322/

相关文章:

angular - 如何在带有Angular的Electron中的新窗口中打开component.html?

javascript - 在处理中通过字符串将图像加载到 Canvas

javascript - anchor 击下载在 Firefox 中不起作用

windows - 是否应该关闭从 _spawnv 返回的句柄?

windows - 如何创建目录的快捷方式以便它在资源管理器中打开

angular - Electron JS + Angular项目中的"non-JavaScript MIME type"错误

javascript - 如何在HTML、JS中通过鼠标点击改变矩形部分的颜色?

PHP : How to use alert() before header ('location:http://domain.com' );

c++ - 跨应用消息的PostMessage

electron - 为什么我的 Electron 应用程序在关闭渲染器窗口时退出?