6

我正在使用 SDL 2.0,并决定尝试制作多个窗口。不幸的是,现在如果不返回 IDE 并强制关闭它,我就无法退出我的程序。

事件处理尽可能简单,我只是轮询退出事件,在我添加第二个窗口之前它工作得非常好。使用多个窗口时是否忽略 Quit 事件?如果是这样,我该如何重新打开它?

4

2 回答 2

9

Quit 事件仅在最后一个打开的窗口试图关闭时发送,否则发送窗口关闭事件。

于 2013-08-03T18:27:19.630 回答
4

我也遇到了这个问题,关于这个主题的文档有点稀疏,所以我最终来到了这里。

问题的总结是:

  • 如果您只有一个窗口,单击 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,因为它现在是唯一的活动窗口 - 因此最好根据情况以正确处理两者的方式构造您的代码。

有关更多信息,请参阅文档

于 2019-09-02T21:03:08.130 回答