【问题标题】:SDL 2.0 Quit Event with Multiple Windows具有多个窗口的 SDL 2.0 退出事件
【发布时间】:2019-09-03 05:03:08
【问题描述】:
我正在使用 SDL 2.0,并决定尝试制作多个窗口。不幸的是,现在如果不返回 IDE 并强制关闭它,我就无法退出我的程序。
事件处理尽可能简单,我只是轮询退出事件,在我添加第二个窗口之前它工作得非常好。使用多个窗口时是否忽略 Quit 事件?如果是这样,我该如何重新打开它?
【问题讨论】:
标签:
event-handling
sdl
quit
multi-window
【解决方案1】:
只有在最后一个打开的窗口试图关闭时才会发送退出事件,否则会发送一个窗口关闭事件。
【解决方案2】:
我也遇到了这个问题,而且关于这个主题的文档有点稀疏,所以我就在这里结束了。
问题的总结是:
- 如果您只有一个窗口,单击 X 按钮将触发
SDL_QUIT 事件。
- 如果您有两个或更多窗口,单击 X 按钮将触发
SDL_WINDOWEVENT 事件,其内部类型为 SDL_WINDOWEVENT_CLOSE。
因此,如果您的单窗口退出事件的典型代码可能如下所示:
SDL_Event e;
while (SDL_PollEvent(&e))
{
if (e.type == SDL_QUIT)
{
// ... Handle close ...
}
}
多窗口等效项是:
SDL_Event e;
while (SDL_PollEvent(&e))
{
if (e.type == SDL_WINDOWEVENT
&& e.window.event == SDL_WINDOWEVENT_CLOSE)
{
// ... Handle window close for each window ...
// Note, you can also check e.window.windowID to check which
// of your windows the event came from.
// e.g.:
if (SDL_GetWindowID(myWindowA) == e.window.windowID)
{
// ... close window A ...
}
}
}
请注意,在最后一个窗口中,您将再次收到 SDL_QUIT,因为它现在是唯一的活动窗口 - 因此最好根据具体情况以正确处理这两个窗口的方式构建您的代码。
请参阅docs 了解更多信息。