【问题标题】:Get and set correct window position with node.js使用 node.js 获取并设置正确的窗口位置
【发布时间】:2015-08-03 14:57:33
【问题描述】:

close 事件中,我将窗口位置保持如下:

localStorage.lastlayout = JSON.stringify({
  "left": win.x,
  "top": win.y,
  "width": win.width,
  "height": win.height
});

在开始时,我使用以下命令恢复它:

    data = JSON.parse(localStorage.lastlayout);
    win.moveTo(data.left, data.top);
    win.resizeTo(data.width, data.height);

问题是位置已关闭。据我所知,我得到了 inner 的位置。设置时我设置了 outer 位置。窗口标题和边框仅在设置时考虑。

由于这是跨平台代码,我无法在所有平台上测试它(还),我不知道是否可以获得窗口引擎的指标,以便我可以通过编程方式更正它(想想用户在 Windows 上更改 DPI 或主题)。

有办法弥补吗?

【问题讨论】:

  • 类似的代码通常在我的 Windows 和 Mac 上运行良好。也许在某个地方(package.json?)你将“frame”设置为false?
  • 我根本没有设置。从documentation 我看不出这有什么帮助。我不想有一个无框窗口,我需要标题和小部件。我错过了什么吗?我现在无法试用,目前无法访问代码。
  • 你见过wiki page on this吗?我认为记住窗口位置应该是清单中position 的一个选项,就此而言,应该有一个使用操作系统默认值的选项。
  • 不,我没有。谢谢你把我指向这个页面。我想知道为什么尽管进行了彻底的搜索,我还是找不到它。我现在拥有的在功能上是相同的,但与平台无关。我采用指标而不是嗅探(最佳实践是测试功能是否可用,而不是针对特定代理/平台)。此外,没有水平增量。在 XFCE 上(例如,我测试了几个平台/win-managers)有 3 个像素的水平间隙(基于主题)。因此,确定且优雅的解决方案是测量窗口指标。

标签: node.js nw.js


【解决方案1】:

好的,我搞定了。我检测相对于已知位置(0, 0) 的偏移量,然后将其偏离所需位置。它并不完美,但它确实有效:

      win.resizeTo(128, 128);
      win.moveTo(0, 0);
      log("dbg", "win", "detected metrics: " + win.x + ", " + win.y);
      win.moveTo(data.left - win.x, data.top - win.y);
      win.resizeTo(data.width, data.height);

出于某种原因,初始调整大小是必要的。如果窗口不够大,在某些平台上似乎根本没有绘制标题和边框。接下来我把它移到原点。 win.xwin.y 包含此时的偏移量。第二个moveTo() 使用更正后的坐标,最后我将窗口大小调整为实际所需的大小。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多