9

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

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

4

4 回答 4

25

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

于 2014-11-28T19:21:54.073 回答
14

您可以查看 wiki 文档:SDL_SetWindowSize

于 2013-12-23T01:54:41.463 回答
5

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

在 中,如果您只想要窗口的最终大小,或者如果您想要第一个和最后一个之间的所有大小,请switch使用该标志。SDL_WINDOWEVENT_RESIZEDSDL_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);
}
于 2019-04-06T07:26:30.473 回答
1
Window = SDL_CreateWindow(
  "Test",
  SDL_WINDOWPOS_UNDEFINED,
  SDL_WINDOWPOS_UNDEFINED,
  ScreenSizeX,
  ScreenSizeY,
  SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE
);

使用此函数调用

于 2021-01-04T18:40:31.317 回答