[英]SDL2 multiple windows focus
我在SDL2中使用Windows焦點時遇到一些問題。
我有兩個窗口,聽聽焦點增益和丟失的事件。
當我單擊窗口2時,將觸發以下事件:
"Window 1 lost focus"
"Window 2 gained focus."
當我單擊窗口1時,將觸發以下事件:
"Window 2 lost focus."
"Window 1 gained focus."
"Window 1 lost focus."
通過操作系統周圍的發光效果,我可以清楚地告訴窗口焦點。
另外,在窗口1上進行測試時,其他用於獲取焦點信息的SDL2函數也會給出相同,錯誤的答案。
我將代碼縮減為幾乎最小的測試用例:
#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為多個窗口提供正確的焦點信息?
在此先感謝您的幫助。
我對此進行了更多研究,發現我描述的問題是一個已知的錯誤,可以在此處看到。
鏈接的另一端有一個補丁,但該補丁已包含在最新版本的SDL中。
我個人通過安裝該庫的2.0.3
版本解決了這一問題。
希望這會幫助別人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.