使用node.js获取并设置正确的窗口位置
在使用node.js获取并设置正确的窗口位置,node.js,nw.js,Node.js,Nw.js,在关闭事件中,我按如下方式保持窗口位置: 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);
关闭
事件中,我按如下方式保持窗口位置:
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);
问题是位置已关闭。据我所知,我得到了内心的位置。设置时,我设置外部位置。窗口标题和边框仅在设置时考虑
由于这是跨平台的代码,我无法在所有平台上测试它(目前),我不知道是否有可能获得窗口引擎的指标,以便我可以通过编程方式更正它(想想用户在Windows上更改DPI或主题)
有什么办法可以弥补这一点吗?好的,我已经搞定了。我检测到相对于已知位置的偏移量
(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.x
和win.y
包含此时的偏移量。第二个moveTo()
使用正确的坐标,最后我将窗口调整到实际需要的大小。类似的代码通常在我的Windows和Mac上运行良好。也许在某个地方(package.json?)您将“frame”设置为false?我根本没有设置它。从表面上看,我看不出这有什么帮助。我不想有一个无框窗口,我需要的标题和小部件。我错过什么了吗?我现在不能尝试,我现在没有访问代码的权限。你看到了吗?我认为记忆窗口位置应该是清单中的一个选项,对于这个问题,应该有一个使用操作系统默认值的选项。不,我没有。谢谢你给我指出这一页。我想知道为什么我找遍了却找不到它。我现在拥有的功能相同,但与平台无关。我采用指标而不是嗅探(最佳实践是测试功能是否可用,而不是针对特定的代理/平台)。此外,没有水平三角形。在XFCE上(例如,我测试了几个平台/win管理器),水平间距为3像素(基于主题)。因此,确定而优雅的解决方案是测量窗口度量。