在SDL2中,windows focus有一些问题。
我有两个窗口,听聚焦增益和失去的事件。
当我单击窗口2时,以下事件将触发:
"Window 1 lost focus"
"Window 2 gained focus."当我单击窗口1时,以下事件触发:
"Window 2 lost focus."
"Window 1 gained focus."
"Window 1 lost focus."通过我的操作系统所吸引的发光效果,我可以清楚地看出窗口有焦点。
另外,其他获得焦点信息的SDL2函数在窗口1上测试时也会给出同样的错误答案。
我将代码精简为一个几乎最小的测试用例:
#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的多个窗口提供正确的焦点信息?
发布于 2014-04-14 18:21:24
https://stackoverflow.com/questions/23037000
复制相似问题