event.window.windowIDSDL_GetWindowID()的输出有什么区别?

为什么是std::cout << m_SDLEvent.window.windowID << std::endl;
 在控制台中输出1819558491,而std::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,因为您访问了无效的联合字段。那是未定义的行为。

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

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

10-07 18:57
查看更多