【问题标题】:Resize SDL2 window?调整 SDL2 窗口的大小?
【发布时间】:2014-01-11 04:55:57
【问题描述】:

刚刚从 SDL1.2 跳转到 SDL2,一直在转换我的代码,但不知道如何调整窗口大小。这是我现在拥有的代码:

SDL_DestroyWindow(Window);
Window = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, ScreenSizeX, ScreenSizeY, SDL_WINDOW_SHOWN);
screen = SDL_GetWindowSurface(Window);

如您所见,这只是破坏了窗口并创建了一个新窗口。马虎,但它的工作原理。我想要的只是调整窗口大小,可以吗?

【问题讨论】:

    标签: c++ window sdl sdl-2


    【解决方案1】:
    Window = SDL_CreateWindow(
      "Test",
      SDL_WINDOWPOS_UNDEFINED,
      SDL_WINDOWPOS_UNDEFINED,
      ScreenSizeX,
      ScreenSizeY,
      SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE
    );
    

    使用这个函数调用

    【讨论】:

      【解决方案2】:

      要在 SDL 中调整窗口大小,首先使用标志SDL_WINDOW_RESIZABLE 设置它,然后在开关中检测调整窗口大小事件,最后调用以下方法SDL_SetWindowSize(m_window, windowWidth, windowHeight)glViewport(0, 0, windowWidth, windowHeight)

      switch 中,如果您只想要窗口的最终大小,请使用标志SDL_WINDOWEVENT_RESIZED,如果您想要第一个和最后一个之间的所有大小,请使用SDL_WINDOWEVENT_SIZE_CHANGED

      最后,用新的窗口宽度和高度更新您自己的相机。

      m_window = SDL_CreateWindow("INCEPTION",
          SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
          m_windowWidth, m_windowHeight,
          SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
      
      
      switch (m_event.type) {
      
          case SDL_WINDOWEVENT:
      
              if (m_event.window.event == SDL_WINDOWEVENT_RESIZED) {
                  logFileStderr("MESSAGE:Resizing window...\n");
                  resizeWindow(m_event.window.data1, m_event.window.data2);
              }
              break;
      
          default:
              break;
      }
      
      
      void InceptionServices::resizeWindow(int windowWidth, int windowHeight) {
          logFileStderr("MESSAGE: Window width, height ... %d, %d\n", windowWidth, windowHeight);
          m_camera->resizeWindow(windowWidth, windowHeight);
          glViewport(0, 0, windowWidth, windowHeight);
      }
      

      【讨论】:

      • 为什么要用你当前窗口的大小调用SDL_SetWindowSize
      • SDL_SetWindowSizevoid InceptionServices::resizeWindow(int windowWidth, int windowHeight) 中调用,调整后的窗口大小为m_event.window.data1m_event.window.data2,由SDL 在开关中给出。
      • 可以,但是窗口会自动调整大小。您无需调用 SDL_SetWindowSize 即可调整其大小。
      • 我猜这对我来说是为了完整性,但我同意 SDL 自动调整窗口大小,所以我只是删除了 SDL_SetWindowSize(m_window, windowWidth, windowHeight); 行。
      【解决方案3】:

      我相信您可以使用 SDL_CreateWindow 中的 SDL_WINDOW_RESIZABLE 标志来调整窗口大小。

      【讨论】:

        【解决方案4】:

        您可以查看 wiki 文档:SDL_SetWindowSize

        【讨论】:

          猜你喜欢
          • 2014-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-16
          • 1970-01-01
          • 2019-05-15
          相关资源
          最近更新 更多