调整 SDL2 窗口的大小

Resize SDL2 window?

本文关键字:窗口 SDL2 调整      更新时间:2023-10-16

刚刚从 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);

如您所见,它只会破坏窗口并创建一个新窗口。马虎,但它有效。我想要的只是调整窗口大小,可以吗?

我相信

您可以在SDL_CreateWindow中使用 SDL_WINDOW_RESIZABLE 标志来调整窗口大小。

你可以看看维基文档: SDL_SetWindowSize

要在 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, %dn", windowWidth, windowHeight);
    m_camera->resizeWindow(windowWidth, windowHeight);
    glViewport(0, 0, windowWidth, windowHeight);
}
Window = SDL_CreateWindow(
  "Test",
  SDL_WINDOWPOS_UNDEFINED,
  SDL_WINDOWPOS_UNDEFINED,
  ScreenSizeX,
  ScreenSizeY,
  SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE
);

使用此函数调用