【问题标题】:SDL 2.0 Quit Event with Multiple Windows具有多个窗口的 SDL 2.0 退出事件
【发布时间】:2019-09-03 05:03:08
【问题描述】:

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

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

【问题讨论】:

  • 我们可以看看一些代码吗?

标签: event-handling sdl quit multi-window


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    问题的总结是:

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

    请参阅docs 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多