带有多个窗口的SDL 2.0退出事件



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

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

只有当最后一个打开的窗口试图关闭时,才会发送Quit事件,否则会发送窗口关闭事件。

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

问题的总结是:

  • 如果只有一个窗口,单击X按钮将触发SDL_QUIT事件
  • 如果您有两个或多个窗口,单击X按钮将触发内部类型为SDL_WINDOWEVENT_CLOSESDL_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,因为它现在是唯一的活动窗口,因此最好根据情况以正确处理这两个窗口的方式构建代码。

有关详细信息,请参阅文档。

相关内容

  • 没有找到相关文章

最新更新