如何将OpenGL显示(由OpenGL创建的窗口)设置为最大化?

5
我想将我的OpenGL显示设置为最大化。
如果我设置setResizeable(true),然后让用户点击最大化按钮,那么我可以让他们手动完成,但是这对于用户来说是一个痛苦和不必要的步骤,正如一位测试人员提到的
我可以将显示大小设置为与玩家屏幕相同的大小,但那看起来很奇怪,并且我并不想进入全屏模式。
显然,我已经可以全屏和设置显示大小,但我目前无法找到任何实际允许我最大化显示的方法。
如果您不理解全屏和最大化之间的区别(Meta Stack Overflow discussion),那么这里有一个关于最大化的描述Maximized,这里是一个关于全屏的描述Fullscreen

1
你使用什么框架来创建窗口和GL上下文?我怀疑你可能需要找到屏幕分辨率,并设置窗口位置/大小以匹配。 - jozxyqk
4
你可以使用最大化提示创建窗口,但这取决于你如何制作窗口(与OpenGL无关)。 - ratchet freak
@ratchetfreak 我使用 'Display.create()' 创建显示。目前我还没有找到任何给出“最大化提示”的方法。 - Joehot200
@Dawnkeeper 什么?我想要最大化一个OpenGL显示!我不确定到底是什么让你困惑了。 - Joehot200
4
也许将标题改为关于特定设置lwjgl窗口-最大化是窗口管理器而不是GL执行的,但你有Java和lwjgl阻挡。也许在他们的论坛上发帖? - jozxyqk
显示剩余2条评论
3个回答

4

最大化模式:

在调用CreateWindow或CreateWindowEx时,使用WS_MAXIMIZE

 hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "The title of my window",
        WS_MAZIMIZE,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

这个帖子可能会对使用GLUT的人感兴趣。

这里有一个建议:

我认为你可以通过将显示位置设置为0px, 0px,并通过Display.getDesktopDisplayMode()获取桌面DisplayMode,然后将此DisplayMode设置为新的DisplayMode来最大化窗口。

全屏模式:

setDisplayModeAndFullscreen

public static void setDisplayModeAndFullscreen(DisplayMode mode)
                                        throws LWJGLException
  • 设置上下文的模式。
  • 如果没有通过create()创建上下文,则在调用create()时应用该模式。
  • 如果mode.isFullscreenCapable()true,则上下文将变为全屏上下文,并且显示模式将切换到getDisplayMode()给出的模式。
  • 如果mode.isFullscreenCapable()false,则上下文将成为具有getDisplayMode()返回的模式中给定尺寸的窗口上下文。本地光标位置也将重置。

参数:

mode - The new display mode to set. Must be non-null.
Throws:
LWJGLException - If the mode switch fails.

这里找到了相关内容

我还发现这个,它似乎是在用可能的屏幕模式填充一个数组列表,但我不确定。


但我从未调用“CreateWindowEx”?有点令人困惑。 - Joehot200
你调用了“CreateWindow”吗? - jbutler483
不。我调用“Display.create()”。就这样。 - Joehot200

3
您可以使用Display.setDisplayModeAndFullscreen(DisplayMode mode)来改变LWJGL窗口的大小,正如jbutler483已经提到的那样。
但是有一个技巧。获取这些显示模式有三种方法: 如果您使用构造函数,则可以根据自己的喜好设置模式,但这些模式都被设置为'isFullscreenCapable() == false'。
如果您想全屏显示,则必须使用“getAvailableDisplayModes()”并选择其中一个具有“isFullscreenCapable() == true”的模式。这是获得全屏模式的唯一方式。
最后,您可以使用“getDesktopDisplayMode”获取适合桌面的模式。我从未测试过是否可以启用全屏。

虽然这并不能真正回答问题,getDesktopDisplayMode()似乎会返回一个适合桌面的模式,虽然不是全屏但很接近 - 所以我给它点了赞。感谢帮助。 - Joehot200

1
将显示器的父级设置为附加到JFrameCanvas,然后将该JFrame设置为最大化。

示例:

JFrame frame = new JFrame();
Canvas canvas = new Canvas();
frame.add(canvas);
frame.setVisible(true);
try {
    Display.setParent(canvas);
    Display.create();
} catch (LWJGLException e) {
    e.printStackTrace();
}
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接