SDL2未接收到窗口事件

SDL2 not receiving window events

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

我已经在带有Xcode的Macbook上使用SDL2一段时间了,我很高兴。最近,我尝试接收一个失去焦点的事件,但它不起作用。经过一些修补,我发现没有收到任何窗口事件,除了一个类型为512的窗口事件,它以随机间隔每秒显示2-5次。WindowEventID在枚举中,而不是十六进制格式,所以它不应该是某个十六进制数字。我在SDL2框架中搜索了512,但一无所获。其他事件,如SDL_QUITSDL_KEYDOWN也可以正常工作。有人知道发生了什么事吗?

这是我的事件循环:

SDL_Event event;
bool running = false;
while(running) {
    while(SDL_PollEvent(&event)) {
        if(event.type == SDL_QUIT)
            running = false;
        else if(event.type == SDL_KEYDOWN) {
            cout << event.key.type << endl;
        }
        else if(event.type == SDL_WINDOWEVENT) {
            cout << event.window.type << endl;
        }
    }
    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    SDL_RenderClear(renderer);
    SDL_RenderPresent(renderer);
}

您需要检查event.window.event而不是event.window.type,因为类型更通用,并且有一些其他用法(代码512与SDL_WINDOW_INPUT_FOCUS有关,每当您将光标移动到窗口或从窗口移动时,它都会触发)。所以你的代码可能是这样的:

while(SDL_PollEvent(&event)) {
    switch(event.type)
    {
    case SDL_WINDOWEVENT:
        switch(event.window.event)
        {
        case SDL_WINDOWEVENT_ENTER:
            cout << "entered" << endl;
            break;
        case SDL_WINDOWEVENT_LEAVE:
            cout << "left" << endl;
            break;
        }
        break;
    case SDL_KEYDOWN:
        cout << "key pressed: " << event.key.keysym.sym << endl;
        break;
    }
}