SDL 2.0在多窗口下如何退出?

7
我正在使用SDL 2.0,并尝试创建多个窗口。不幸的是,现在我无法退出程序,除非返回IDE并强制关闭它。
事件处理尽可能简单,我只轮询退出事件,在添加第二个窗口之前它完美地工作。当使用多个窗口时,退出事件被忽略了吗?如果是这样,我该如何重新启用它?

我们能看到一些代码吗? - iKlsR
2个回答

10
只有在最后一个打开的窗口试图关闭时,才会发送“退出事件”,否则会发送窗口关闭事件。

5
我也遇到了这个问题,而且文档在这个主题上有点匮乏,所以我最终来到了这里。
问题的概述是:
- 如果你只有一个窗口,点击 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,因为它现在是唯一活动的窗口-所以最好根据情况正确处理代码结构。请参阅文档获取更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接