dlrandy / note-issues

2 stars 0 forks source link

electron 5-8 #37

Open dlrandy opened 6 years ago

dlrandy commented 6 years ago

Menu 是 只能直接用于主线程的

Electron 赋予了对application menu 和 contextual menu的 完全控制

menu一般需要使用Menu 和MenuItem来实现 application 级别的创建: let template = [ { label: 'xxooxo', role: '', key: '' enabled: , accelerator: '', click, type: 'menu/separator/(checkbox|checked)/(radio|checked)' submneu: [ { } ] } ] const menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu)

MAC的Menu 是系统级的,它的第一个app Menu应该是app的 name,这个是特殊的menu没有这个的话会有第一个menu不正常显示的问题 不想要默认的role可以 使用click(menuitem, browserWindow, event)进行自定义

main process 和renderer process之间的交互需要使用:remote或者IPC remote可以理解为在renderer进程里有一个main process的中介。 ipc则是观察者了;

对于contextMenu可以使用popup(win)的方法进行弹出

ipc里拿到发送窗口的方法: 1、BrowserWindow.fromWebContents(event.sender)// 2、BrowserWindow.fromId(event.sender.webContents.id)//优先使用这个方法

dlrandy commented 6 years ago

MAIN process <---IPC-->renderer proess 同步的IPC let reply = ipcRenderer.sendSync(channel, args) pcMain.on(channel, (event, args) => { event.returnValue='sfsdfsdfdsf' })

异步的IPC let ipc.send(channel, args) ipc.on('async-reply', (event, args) => { })

ipcMain.on(channel, (event, args) => { event.sender.send('async-reply', args) })

ipcMain.removeListener(chanel, function)

ipcRenderer.removeListener(chanel, function)

ipc.removeAllListeners(chanel)

ipc.once

dlrandy commented 6 years ago

Dialog

dialog.showOpenDialog(mainWindow, { properties: ['openDirectory'] title: '', defautPath: '', filters: [ {name: 'images', extensions:[]} ] }, function(files){

})

dialog.showMessageBox({ buttons: [], defaultId:, message:, detail:, icon:electron.nativeImage.createfromPath() }, function(index){

})

dialog.showErrorBox(title, mesasge)

dlrandy commented 6 years ago

webContents是BrowserWindow的属性

webContents有events和methods:capture event,Manage windows,capture Window to image、pdf,screens Module和locale

electron.webContents.getAllWebContents()需要在createWindow之后调用才不是空的数组

创建Window要在app ready之后

去掉html的title在browserWindow的options里使用title可以实现动态的title

did-start-loading event发生在window开始加载(loadURL)的时候,可能会在MAin process里需要一些activity的时候使用

did-start-loading dom-ready did-finish-load did-stop-loading

需要使用setTimeout browserWindow.webContents.capturePage({ x:, y:, width: browserWindow.getBounds().width, height: browserWindow.getBounds().height }, function(image){ let desktop = app.getPath('desktop); fs.writeFile(path, image.toPNG()) })

browserWindow.webContents.printToPDF({}, function(data){

})

想设置窗口出现在屏幕的位置的时候,可能要用到screen模块

electron.screen.getAllDisplays()/getPrimaryDisplay()

app.getLocale()

did