c++ - SDL2 不接收窗口事件

标签 c++ events sdl sdl-2

我在带有 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,因为 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;
    }
}

关于c++ - SDL2 不接收窗口事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18454588/

相关文章:

angular - 如何调试在 angular/jasmine 测试用例中抛出的 [object ErrorEvent]

Node.js 在另一个中的保存事件上更新数据库对象

c++ - SDL 和 C++ : Waiting for multiple threads to finish

c++ - 这是缩小数组的有效方法吗?

c++ - 如何在AVR中定义或创建自定义的PORT和PIN?

boost::asio::basic_socket_acceptor::async_accept() 的接受处理程序中的 C++ boost::asio Variadic 模板运算符

javascript - javascript(JQuery)中的最佳实践是什么,将相同的事件类型绑定(bind)到每个元素或绑定(bind)到它们的父元素?

c++ - 在固定管道中使用 OpenGL 绘制时 mask 部分纹理

无法在嵌入式设备上为 SDL 屏幕设置视频模式

c++ - 矩阵行列式算法C++