最大化SDL窗口

12

如何告诉SDL将应用程序窗口最大化?

我正在使用以下标志创建窗口:SDL_OPENGL | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE。


这个解决方案需要可移植性吗,还是Win32或X11的解决方案就足够了? - Judge Maygarden
Win 32应该足够了,但是支持Linux也是受欢迎的。 - Matěj Zábský
好的,我在我的答案中添加了一个代码片段,展示如何使用Win32 API最大化你的SDL窗口。它还未经测试... - Judge Maygarden
5个回答

11
所有的答案都已经过时了,现在只需要在SDL_CreateWindow的标志中指定SDL_WINDOW_MAXIMIZED
window = SDL_CreateWindow(
    "Foobar",
    SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720,
    SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_MAXIMIZED
);

7
在SDL2.0中,
sdl_window = SDL_CreateWindow("title", 10, 30, window_width, window_height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
SDL_MaximizeWindow(sdl_window);
SDL_GetWindowSize(sdl_window, &window_width, &window_height);
sdl_gl_context = SDL_GL_CreateContext(sdl_window);
SDL_GL_MakeCurrent(sdl_window, sdl_gl_context);

5
这项功能由窗口管理器控制,当您使用SDL_RESIZABLE标志时。要模拟使用SDL最大化窗口,您需要首先确定窗口在最大化时所占据的大小。然后,在使用SDL_VIDEO_WINDOW_POS环境变量放置窗口后,您将使用此大小调用SDL_SetVideoMode

如果您真的需要窗口像单击最大化按钮一样最大化,那么您将不得不直接访问底层窗口管理器(即SDL对此没有帮助)。

例如,可以使用Win32 API中的ShowWindow函数来最大化窗口。要获取由SDL创建的窗口的句柄,请使用SDL_GetWMInfo函数。生成的SDL_SysWMinfo结构包含类型为HWND的window字段。必须将其与SW_MAXIMIZE标志一起传递给ShowWindow函数。

SDL_SysWMinfo info;
SDL_VERSION(&info.version);
SDL_GetWMInfo(&info);
ShowWindow(info.window, SW_MAXIMIZE);

1
这只是一个模拟,不是真正的东西。真正的最大化窗口没有左右边框,在标题栏中有“最小化”图标而不是“最大化”图标。 - Matěj Zábský

0

还有其他的环境变量可以设置来控制显示窗口。不幸的是,SDL文档目前无法访问,所以我无法查找您需要的内容。


听起来很有前途,但我在文档中找不到类似的内容。 - Matěj Zábský
我再次查看了环境变量,没有任何影响窗口状态的变量,只有位置。 - Matěj Zábský

-1

SDL_FULLSCREEN 是你要寻找的选项:

flags |= SDL_FULLSCREEN;
screen = SDL_SetVideoMode(..., flags);

我正在寻找一种方法来最大化窗口,而不是使其全屏。 - Matěj Zábský
抱歉,我的错 - 这教会我了,在半睡状态下处理这些问题!今晚我会尝试提出一种最大化屏幕的解决方案。 - MattyT

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