背景

根据网络搜索引擎提供的解决方法,如 electron无边框模式完美解决同时实现拖动和双击最大化等,发现了:添加代码后,拖动窗口时窗口移动,但同时窗口大小发生意想不到的改变。

解决

  1. 考虑到计算机图形是为了在屏幕上显示点阵图像,计算中会产生精度误差,从而导致图形抖动。

  2. 尝试移动窗口前记录窗口尺寸,移动后重设窗口尺寸

1
2
3
let oldsize = mainWindow.getSize()
...
mainWindow.setSize(oldsize.width, oldsize.height)
  1. 运行尝试,并未达到预期效果。窗口大小仍然会发生大幅改变。

  2. 网络上搜索不到相关内容,只能无尽的查api,发现另一个函数 xxxBounds()

1
2
3
4
5
let oldBounds = mainWindow.getBounds()
...
oldBounds.x = x
oldBounds.y = y
mainWindow.setBounds(oldBounds, true)

注意这个函数与xxxSize()之间的差异,getBounds()会返回一个四个属性的对象,属性值分别为x->x坐标,y->y坐标,width->窗口宽度,height->窗口高度。

所以在示例中将移动目标点的(x,y)坐标赋值修改至oldBounds,这样通过setBounds函数同时维护窗口的位置及维度。

  1. 运行尝试,成功,窗口大小不会再发生大幅改变。试着读取窗口大小,变化幅度仅为1像素,长期拖动也不会出现问题。

出现该问题,并且搜不到相关问题解决方案,原因可能是我计算机的显示设置-缩放与布局设置的是125%(仅作猜想,未经验证!)