Задать местоположение окна на экране при создании окна позволяют следующие опции:
center — если указано значение true (значение по умолчанию), то окно будет показано по центру экрана;x — горизонтальная координата относительно левого верхнего угла экрана;y — вертикальная координата относительно левого верхнего угла экрана;movable — если указано значение false, то окно нельзя будет перемещать с помощью мыши (значение по умолчанию: true).Пример:
win = new BrowserWindow({
width: 800,
height: 600,
center: false,
x: 100,
y: 100,
movable: true
});Управлять местоположением окна после его создания позволяют следующие методы:
setPosition(<X>, <Y>[, <Анимация>]) — перемещает окно в указанную позицию;getPosition() — возвращает массив с координатами окна;center() — перемещает окно в центр экрана;setBounds(<Объект>[, <Анимация>]) — задает координаты и размеры окна. Значение в первом параметре указывается в виде объекта со свойствами x, y, width и height:win.setBounds({x: 200, y: 200, width: 800, height: 600});Если какое-либо свойство не указано, то оно будет иметь текущее значение. Укажем только высоту:
win.setBounds({height: 500});getBounds() — возвращает координаты и размеры окна в виде объекта со свойствами x, y, width и height:console.log( win.getBounds() );
// { x: 200, y: 200, width: 800, height: 500 }setContentBounds(<Объект>[, <Анимация>]) — задает координаты и размеры клиентской области окна. Значение в первом параметре указывается в виде объекта со свойствами x, y, width и height:win.setContentBounds({x: 200, y: 200, width: 800, height: 600});getNormalBounds() — возвращает координаты и размеры окна в нормальном (не развернутом или свернутом) состоянии в виде объекта со свойствами x, y, width и height:console.log( win.getNormalBounds() );
// { x: 200, y: 200, width: 800, height: 600 }setMovable(true | false) — если указано значение false, то пользователь не сможет перемещать окно по экрану;isMovable() — возвращает значение true, если пользователь может перемещать окно, и false — в противном случае.События:
will-move — перед перемещением окна пользователем. Если вызвать метод preventDefault() через объект события, то положение окна изменено не будет:win.on('will-move', (e, b) => {
e.preventDefault();
console.log(b); // { x: 760, y: 356, width: 500, height: 300 }
});moved — возникает один раз после изменения местоположения окна (в самом конце);move — генерируется после любого изменения местоположения окна (несколько раз в процессе изменения местоположения окна пользователем).Для отображения окна у правой или нижней границы необходимо знать размеры экрана. Получить эту информацию позволяет объект screen из пакета electron:
const { screen } = require('electron');Обратите внимание: если объект создается таким образом в процессе Renderer, то он не будет доступен, т. к. существует глобальный объект window.screen.
Объект screen содержит следующие основные методы (полный список см. в документации):
getCursorScreenPoint() — возвращает местоположение курсора:console.log(screen.getCursorScreenPoint());
// { x: 767, y: 549 }getAllDisplays() — возвращает массив со всеми доступными экранами;getPrimaryDisplay() — возвращает ссылку на основной экран:console.log(screen.getPrimaryDisplay());Примерный результат:
{
id: 2528732444,
bounds: { x: 0, y: 0, width: 1920, height: 1080 },
workArea: { x: 0, y: 0, width: 1920, height: 1040 },
accelerometerSupport: 'unknown',
monochrome: false,
colorDepth: 24,
colorSpace: '{primaries_d50_referred: [[0.6599, 0.3287],
[0.3300, 0.5948], [0.1541, 0.0602]], transfer:IEC61966_2_1,
matrix:RGB, range:FULL}',
depthPerComponent: 8,
size: { width: 1920, height: 1080 },
displayFrequency: 60,
workAreaSize: { width: 1920, height: 1040 },
scaleFactor: 1,
rotation: 0,
internal: false,
touchSupport: 'unknown'
}Полные размеры основного экрана доступны через свойство bounds:
const display = screen.getPrimaryDisplay();
console.log(display.bounds);
// { x: 0, y: 0, width: 1920, height: 1080 }Свойство workArea содержит размеры и координаты только доступной части экрана (без размера Панели задач):
console.log(display.workArea);
// { x: 0, y: 0, width: 1920, height: 1040 }