c++ - SDL event.window.windowID 与 GetWindowID()

标签 c++ events input sdl sdl-2

event.window.windowID 的输出有什么区别?和 SDL_GetWindowID()

为什么是std::cout << m_SDLEvent.window.windowID << std::endl; 在控制台中输出 1819558491std::cout << SDL_GetWindowID(m_SDLWindow) << std::endl;输出 1 ?

我如何获得我的 SDL_Window* 的正确 ID在下面的方法中?

void InputManager::Update()
    {
        SDL_PollEvent(&m_SDLEvent);

                switch (m_SDLEvent.type)
                {
                case SDL_QUIT:
                    std::cout << m_SDLEvent.window.windowID << std::endl;
                    SDL_HideWindow(SDL_GetWindowFromID(m_SDLEvent.window.windowID));
                    break;
                }
    }

最佳答案

您看到的是垃圾窗口 ID,因为您访问了一个不活动的 union 字段。这是未定义的行为。

如果m_SDLEvent.type == SDL_WINDOWEVENT,您只能访问m_SDLEvent.window

但是如果m_SDLEvent.type == SDL_QUIT,你必须使用m_SDLEvent.quit结构,它没有窗口id字段(因为SDL_QUIT不特定于一个窗口,但意味着应关闭整个应用程序)。

关于c++ - SDL event.window.windowID 与 GetWindowID(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49842342/

相关文章:

c++ - C++中的异常传播分析

javascript - 捕捉并停止中键点击

javascript - keydown 事件只触发一次

python - 如果 python 出现错误,请用户重新输入

image - PyTorch中的转换有什么作用?

jquery - 使用 jQuery 设置复选框样式

c++ - 加载对象 mtl Direct3D 11

c++ - 将参数发送到 DLL 以进行 boost::bind'ed

javascript - Qt 5.4/QML : How do I correctly implement a custom C++ class as a global QML singleton instance and implement code for its signals (in QML)?

javascript - keypress 和 keydown 通过 event.which 提供不同的代码