SDL 2.0退出多个Windows的事件

时间:2013-07-09 06:08:13

标签: event-handling sdl quit multi-window

我正在使用SDL 2.0,并决定尝试制作多个窗口。不幸的是,现在我不能退出我的程序而不回到IDE并强行关闭它。

事件处理尽可能简单,我只是轮询quit事件,并且在添加第二个窗口之前它完全正常。使用多个窗口时是否忽略退出事件?如果是这样,我该如何重新开启?

2 个答案:

答案 0 :(得分:5)

退出事件仅在最后一个打开的窗口尝试关闭时发送,否则会发送窗口关闭事件。

答案 1 :(得分:0)

我也遇到了这个问题,文档在这个主题上有点稀疏,所以我在这里结束了。

问题的摘要是:

  • 如果只有一个窗口,则单击X按钮将触发一个SDL_QUIT事件。
  • 如果您有两个或多个窗口,则单击X按钮将触发内部类型为SDL_WINDOWEVENT的{​​{1}}事件。

因此,如果您的单窗口退出事件的典型代码可能看起来像这样:

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 ... } } } ,因为它现在是唯一的活动窗口-因此最好根据情况正确地处理这两种代码。

有关更多信息,请参见docs