首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDL2多窗口焦点

SDL2多窗口焦点
EN

Stack Overflow用户
提问于 2014-04-12 22:40:54
回答 1查看 3.7K关注 0票数 1

在SDL2中,windows focus有一些问题。

我有两个窗口,听聚焦增益和失去的事件。

当我单击窗口2时,以下事件将触发:

代码语言:javascript
复制
"Window 1 lost focus"
"Window 2 gained focus."

当我单击窗口1时,以下事件触发:

代码语言:javascript
复制
"Window 2 lost focus."
"Window 1 gained focus."
"Window 1 lost focus."

通过我的操作系统所吸引的发光效果,我可以清楚地看出窗口有焦点。

另外,其他获得焦点信息的SDL2函数在窗口1上测试时也会给出同样的错误答案。

我将代码精简为一个几乎最小的测试用例:

代码语言:javascript
复制
#include <iostream>
#include <SDL2/SDL.h>
using namespace std;
int main(int argc, char **argv) {
  SDL_Init(SDL_INIT_VIDEO);
  SDL_Window* w1=SDL_CreateWindow("Window 1",
                                  SDL_WINDOWPOS_UNDEFINED,
                                  SDL_WINDOWPOS_UNDEFINED,
                                  250,200,SDL_WINDOW_SHOWN);
  SDL_Window* w2=SDL_CreateWindow("Window 2",
                                  SDL_WINDOWPOS_UNDEFINED,
                                  SDL_WINDOWPOS_UNDEFINED,
                                  200,250,SDL_WINDOW_SHOWN);
  bool quit=false;
  while(!quit){
    SDL_Event e;
    while(!quit && SDL_PollEvent(&e)){
      switch(e.type){
        case SDL_WINDOWEVENT :
          { // this block just scopes 'targetWindow' and 'title'
            SDL_Window* targetWindow=SDL_GetWindowFromID(e.window.windowID);
            const char* title=SDL_GetWindowTitle(targetWindow);
            switch(e.window.event){
              case SDL_WINDOWEVENT_FOCUS_GAINED :
                // tell which window gained focus
                cout << title << " gained focus!" << endl;
                break;
              case SDL_WINDOWEVENT_FOCUS_LOST :
                // tell which window lost focus
                cout << title << " lost focus!" << endl;
                break;
            }
          }
          break;
        case SDL_QUIT :
          quit=true;
          break;
      }
    }
  }
  SDL_Quit();
  return 0;
}

这是SDL2多窗口支持中的错误吗?它是否依赖于底层的窗口系统?

更重要的是,是否有一种方法可以为SDL2的多个窗口提供正确的焦点信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-14 18:21:24

我对此做了更多的研究,并发现我描述的问题是一个已知的bug,可以看到这里

在链接的另一端有一个补丁,但它已经包含在SDL的最新版本中。

就我个人而言,我通过安装库的2.0.3版本来解决这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23037000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档