gpt4 book ai didi

c++ - 如何防止我的应用程序窗口转到另一台显示器(Electron + macOS)

转载 作者:行者123 更新时间:2023-12-01 14:08:21 24 4
gpt4 key购买 nike

enter image description here

我有一个以编程方式在用户屏幕周围移动其窗口的应用程序。我的问题:

  • 用户有两个物理显示器
  • 用户在主监视器中启动应用程序
  • 应用程序移动窗口,导致更多的窗口“溢出”到辅助监视器而不是主监视器
  • 这会导致应用程序的窗口完全跳转到该辅助监视器并从主监视器消失。

  • 我希望窗口留在主监视器中,除非我想让它转到辅助监视器,或者某个定义的点(例如中心)进入辅助监视器,或者如果窗口被拆分和分割甚至可以两者都显示。一旦窗口与辅助监视器更多地相交,有没有办法防止这种跳跃发生?

    重申一下,我正在以编程方式移动窗口,并在 macOS 上使用 Electron。

    此外,当我手动移动窗口时,这似乎不会发生,但我认为这是因为它没有使用其百分比规则,而是鼠标点是否已进入辅助监视器。

    此外,我对任何类型的解决方案都持开放态度,包括 C/C++ 或 Swift。

    编辑:这是我当前移动窗口的方式:
    win.setPosition(x, y);

    哪里 win是 Electron BrowserWindow 的一个实例.

    所需的行为是将窗口移动到显示器上的任何位置。目前,如果某些窗口足够离开当前显示的边缘,它会跳转到另一个显示。这是因为 Apple 的默认行为是自动将窗口移动到与其重叠最多的显示器上,并将其隐藏在所有其他显示器上。值得注意的是,这不是手动拖动窗口时的行为,而是以编程方式移动窗口时的行为。

    最佳答案

    我不知道你是如何移动这个窗口的,或者你希望窗口在碰到边缘时如何 Action ,但我会尽力给你一些解决方案。

    我的第一个想法是让您在程序启动时创建屏幕边界。
    所以也许使用 GetSystemMetrics() , screen.getPrimaryDisplay() ,或者这个伪代码可能有帮助:

    var canvas = GetWindowSize()
    var canvasWidth = canvas.width
    var canvasHeight = canvas.height
    if myWindow.x + mywindow.width > canvasWidth
    //if you want it to bounce off the edge
    then myWindow.direction = oppositeDirection
    //if you want it to wrap to the other side of the screen
    then myWindow.X -= canvasWidth

    你应该看看这个 Bouncing DVD Logo 的代码.
    或者看我的 Asteroids game以查看船舶和小行星如何在屏幕中移动。

    此外,您可以使用 distance formula当中心靠近时,让窗口对边缘使用react。 (虽然,这也需要您获得屏幕边界 x 和 y。)

    希望有帮助!

    编辑:
    我想如果你以某种方式使用整个屏幕,(两个显示器)你的窗口甚至不会识别出有一个边缘。话虽如此,我仍然不知道您的代码实际上做了什么。

    关于c++ - 如何防止我的应用程序窗口转到另一台显示器(Electron + macOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61092503/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com