【问题标题】:Maximize SDL window最大化 SDL 窗口
【发布时间】:2010-09-23 15:11:20
【问题描述】:

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

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

【问题讨论】:

  • 此解决方案是否需要可移植,还是 Win32 或 X11 解决方案就足够了?
  • Win 32 应该足够了,不过欢迎 Linux 支持。
  • 好的,我在答案中添加了一个代码 sn-p,显示如何使用 Win32 API 最大化您的 SDL 窗口。它未经测试...

标签: c window sdl portability


【解决方案1】:

所有答案似乎都已经过时了,现在只需将SDL_WINDOW_MAXIMIZED 指定为SDL_CreateWindow 的标志。

window = SDL_CreateWindow(
    "Foobar",
    SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 720,
    SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_MAXIMIZED
);

【讨论】:

    【解决方案2】:

    在 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);
    

    【讨论】:

      【解决方案3】:

      当您使用 SDL_RESIZABLE 标志时,此功能由窗口管理器控制。要使用 SDL 模拟最大化窗口,您需要首先确定窗口在最大化时占用的大小。然后你会在用SDL_VIDEO_WINDOW_POS environment variable 放置窗口后用这个大小调用SDL_SetVideoMode

      如果您确实需要像单击最大化按钮一样最大化窗口,则必须直接访问底层窗口管理器(即 SDL 不会帮助您)。

      例如,ShowWindow 函数可用于使用 Win32 API 最大化窗口。要获取 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);
      

      【讨论】:

      • 这只是一个模拟,不是真的。真正的最大化窗口没有左右边框和“最小化”图标,而不是标题中的“最大化”图标。
      【解决方案4】:

      可以设置额外的环境变量来控制显示窗口。不幸的是,sdl 文档目前已关闭,因此我无法查找您需要的内容。

      【讨论】:

      • 听起来很有希望,但我无法在文档中找到类似的内容。
      • 我查看了环境。变量再一次,并没有影响窗口的状态,只有位置。
      【解决方案5】:

      SDL_FULLSCREEN 是您正在寻找的选项:

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

      【讨论】:

      • 我正在寻找一种方法来最大化窗口,而不是全屏。
      • 抱歉,我的错 - 这会教我在半睡半醒时处理这些问题!今晚我会尝试提出一个最大化屏幕的解决方案。
      猜你喜欢
      • 2012-03-21
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-21
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多