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

时间:2014-11-06 00:01:58

标签: opengl lwjgl

我想将我的OpenGL显示设置为最大化。

如果我setResizeable(true)我可以让用户手动执行,然后让玩家点击最大化按钮,as a tester mentioned对用户来说是一个痛苦和不必要的步骤。

我可以将显示尺寸设置为与播放器屏幕相同的尺寸,但这看起来很奇怪,而且我不是在寻找全屏模式。

显然我可以全屏显示并设置显示尺寸,但我目前无法找到任何实际上允许我实际最大化显示的方法。

如果你不理解全屏和最大化(Meta Stack Overflow discussion)之间的区别,那么这里是对Maximized的描述,这里是对Fullscreen的描述。

3 个答案:

答案 0 :(得分:4)

这个评论太长了,所以我主要在这里发帖:

最大化模式:

调用CreateWindow或CreateWindowEx时,请使用WS_MAZIMIZE

 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,

This thread可能会很有用。

建议here

  

我认为您可以通过将显示位置设置为最大化窗口   0px,0px并获取桌面DisplayMode   Display.getDesktopDisplayMode()然后将此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.

找到here

我还发现this 似乎要提交一个可能的屏幕模式的数组列表 - 但我不确定

答案 1 :(得分:3)

您可以使用jbutler483已经提到的Display.setDisplayModeAndFullscreen(DisplayMode mode)来更改LWJGL窗口的大小。

但是有一个技巧。 有三种方法可以获得这些显示模式:

如果您使用构造函数,您可以根据自己的喜好定制模式,但这些模式都设置为&#39; isFullscreenCapable()== false&#39;。

如果你想全屏显示,你必须使用&#39; getAvailableDisplayModes()&#39;并选择一个具有&#39; isFullscreenCapable()== true&#39;。这是获得全屏模式的唯一方法。

最后但并非最不重要的是,你可以使用&#39; getDesktopDisplayMode&#39;获得适合桌面的模式。我从未测试过是否可以启用全屏。

答案 2 :(得分:1)

将显示的父级设置为Canvas附加的JFrame,然后将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);