event.window.windowID
和SDL_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不是特定于窗口的,而是意味着应关闭整个应用程序)。