我正在使用 SDL 2.0,并决定尝试制作多个窗口。不幸的是,现在如果不返回 IDE 并强制关闭它,我就无法退出我的程序。
事件处理尽可能简单,我只是轮询退出事件,在我添加第二个窗口之前它工作得非常好。使用多个窗口时是否忽略 Quit 事件?如果是这样,我该如何重新打开它?
我正在使用 SDL 2.0,并决定尝试制作多个窗口。不幸的是,现在如果不返回 IDE 并强制关闭它,我就无法退出我的程序。
事件处理尽可能简单,我只是轮询退出事件,在我添加第二个窗口之前它工作得非常好。使用多个窗口时是否忽略 Quit 事件?如果是这样,我该如何重新打开它?
Quit 事件仅在最后一个打开的窗口试图关闭时发送,否则发送窗口关闭事件。
我也遇到了这个问题,关于这个主题的文档有点稀疏,所以我最终来到了这里。
问题的总结是:
SDL_QUIT
事件。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
,因为它现在是唯一的活动窗口 - 因此最好根据情况以正确处理两者的方式构造您的代码。
有关更多信息,请参阅文档。