簡體   English   中英

SDL2多窗口焦點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM