我正在尝试检测SDL2窗口的大小何时更改。但是,至少在MacOS上,SDL_WINDOWEVENT_RESIZED和SDL_WINDOWEVENT_SIZE_CHANGED都不起作用。
这是我的代码:

SDL_Init(SDL_INIT_VIDEO);
SDL_Window *win = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 100, 100, SDL_WINDOW_RESIZABLE);
SDL_Renderer *ren = SDL_CreateRenderer(win, 0, 0);

bool running = true;
SDL_Event event;
while (running) {
    while(SDL_PollEvent(&event) != 0) {
        if(event.type == SDL_QUIT) {
            running = false;
        }

        if(event.type == SDL_WINDOWEVENT_SIZE_CHANGED) {
            return 3;
        }

        if(event.type == SDL_WINDOWEVENT_RESIZED) {
            return 4;
        }
    }

    SDL_RenderClear(ren);
}
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;

当运行程序并调整窗口大小时,什么也不会发生。我是在做错什么还是错误?

编辑:我查阅了有关窗口事件的文档(https://wiki.libsdl.org/SDL_WindowEvent)。
它说要写这样的东西:
event.window.type == SDL_WINDOWEVENT_SIZE_CHANGED

但这也不起作用。

最佳答案

SDL_WINDOWEVENT_*不是事件类型,而是SDL_WindowEventID。也就是说,如果event.typeSDL_WINDOWEVENT,则可以访问window联合字段以获取额外数据,包括event,例如

while(SDL_PollEvent(&event)) {
    if(event.type == SDL_WINDOWEVENT) {
        if(event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
            // ...
        }
    }
}

关于c++ - SDL_WINDOWEVENT_SIZE_CHANGED和SDL_WINDOWEVENT_RESIZED不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57492243/

10-10 21:15
查看更多