如何在多台显示器上正确切换全屏无边框

SHsuperCM:

我一直在寻找一种方法,可以在全屏显示之前根据窗口的位置正确选择要全屏显示的监视器。

我在网上寻找了很长时间,但找不到任何东西,因此最终尝试了一堆东西,直到找到了可行的方法。

我认为最终有人会尝试查找此问题,因此不妨分享我的解决方案。

SHsuperCM:

我最后要做的是使用LWJGL2的Display类获得窗口中心的虚拟屏幕坐标,如下所示:

int x = Display.getX() + Display.getWidth()/2, 
    y = Display.getY() + Display.getHeight()/2;

然后,我使用AWT获取所有可用的监视器:

GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()

我遍历了它们并得到了它们的虚拟边界(并应用了它们可能具有的任何DPI缩放比例):

Rectangle bounds = screenDevice.getDefaultConfiguration().getDefaultTransform().createTransformedShape(screenDevice.getDefaultConfiguration().getBounds()).getBounds();

编辑:稍作更改的行,以便它可以正确支持Windows的DPI缩放。

如果边界包含窗口的中心,则意味着大多数窗口可能在该监视器内:

if(bounds.contains(x,y))
    return bounds; //getMonitorFromWindow()

然后在LibGDX中的无边框全屏窗口和普通窗口之间切换,我做了以下工作:

// config is the LwjglApplicationConfiguration of the application

// upon changing using alt+enter
if(fullscreen) {
    config.resizable = false;
    Gdx.graphics.setUndecorated(true);
    Rectangle monitor = getMonitorFromWindow();
    // set to full screen in current monitor
    Gdx.graphics.setWindowedMode(monitor.width, monitor.height);
    Display.setLocation(monitor.x, monitor.y);
} else {
    config.resizable = true;
    Gdx.graphics.setUndecorated(false);
    Rectangle monitor = getMonitorFromWindow();
    // set to windowed centered in current monitor
    Gdx.graphics.setWindowedMode((int) (monitor.width * 0.8f), (int) (monitor.height * 0.8f));
    Display.setLocation(monitor.x + (int) (monitor.width * 0.1f), monitor.y + (int) (monitor.height * 0.1f));
}

我希望有人会觉得有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Chrome应用全屏显示多台显示器

SDL2:如何正确切换全屏?

如何在PHPStorm中的分支之间正确切换?

Android上的Chrome如何在任务切换器中显示标签?

如何正确切换动态页面上的主题?

如何在React中正确切换元素(如果它在数组中)

多台PC的VGA输出可在具有切换功能的多台显示器上进行镜像

如何在单显示器和双显示器设置之间切换?

显示器配置之间自动切换

屏幕空白时如何在Windows 8上切换显示器显示?

如何在Windows 7中的多台显示器上设置扩展桌面?

运行全屏游戏时双显示器切换?

从(批处理)脚本在多台显示器上启动多个Chrome全屏实例

双显示器切换主题/墙纸

如何在第3台显示器中的2台显示器之间切换

如何在sqlite核心数据文件之间正确切换?

如何在C#中正确切换枚举?

在Mac上全屏显示时,如何在Chrome窗口之间切换?

如何在多显示器设置上快速切换显示器?

如何在双显示器的一台显示器上全屏观看Youtube?

如何使用笔记本电脑底座自动切换显示器

如何使用快捷键快速切换显示器方向?

如何在笔记本电脑上切换显示器,就像将显示器连接到另一台计算机一样?

在Steam Controller打开时切换显示器

如何使用快捷方式切换显示器?

验证任务切换器是否在任务之间正确切换

如何在任务切换器中显示锁定屏幕并正确恢复

如何在多台显示器上正确使用 SetDisplayConfig?

如何使用 UIButton 正确切换 JSON 颜色?