我正在使用SDL 2.0,并决定尝试制作多个窗口。不幸的是,现在我不能退出我的程序而不返回IDE并强制关闭它
事件处理尽可能简单,我只轮询退出事件,在添加第二个窗口之前,它运行得非常好。使用多个窗口时是否忽略退出事件?如果是,我该如何重新打开它?
只有当最后一个打开的窗口试图关闭时,才会发送Quit事件,否则会发送窗口关闭事件。
我也遇到了这个问题,而且关于这个主题的文档有点稀疏,所以我在这里结束了。
问题的总结是:
- 如果只有一个窗口,单击X按钮将触发
SDL_QUIT
事件 - 如果您有两个或多个窗口,单击X按钮将触发内部类型为
SDL_WINDOWEVENT_CLOSE
的SDL_WINDOWEVENT
事件
因此,如果你的单窗口退出事件的典型代码可能看起来像这样:
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
,因为它现在是唯一的活动窗口,因此最好根据情况以正确处理这两个窗口的方式构建代码。
有关详细信息,请参阅文档。