2017-04-02 15 views
1

私は2つのウィンドウを持つシンプルなSDL2アプリケーションを作成しています。SDL2 - ウィンドウを再オープンできません

最初のウィンドウ(window変数)はアプリケーションの起動時に表示され、2番目のウィンドウ(window2変数)は非表示になります。

期待される動作:

私はその後、私は2番目のウィンドウを閉じて、第二のウィンドウがポップアップし、最初のウィンドウをクリックしてください。

そして、私が望むだけウィンドウを閉じて再び開くことができます。

観察された行動:

私は2番目のウィンドウを閉じると、私は最初のウィンドウでreclick場合に予想されるように、第2のウィンドウは表示されません。

my commentに記載されているとおり、ウィンドウはウィンドウマネージャ(Wayland)には表示されません。


コード:

#include <SDL2/SDL.h> 

int main() 
{ 
    SDL_Window* window, *window2 = NULL; 

    if (SDL_Init(SDL_INIT_VIDEO) < 0) { 
     return 1; 
    } else { 
     window = SDL_CreateWindow("ONE", SDL_WINDOWPOS_UNDEFINED, 
        SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); 
     window2 = SDL_CreateWindow("TWO", SDL_WINDOWPOS_UNDEFINED, 
         SDL_WINDOWPOS_UNDEFINED, 320, 240, SDL_WINDOW_HIDDEN); 

     if (window == NULL || window2 == NULL) { 
      SDL_DestroyWindow(window); 
      SDL_DestroyWindow(window2); 
      return 1; 
     } 

     bool running = true; 

     while(running) { 
      SDL_Event event; 
      while (SDL_PollEvent(&event)) { 
       if (event.type == SDL_WINDOWEVENT) { 
        if (event.window.event == SDL_WINDOWEVENT_CLOSE) { 
         if (SDL_GetWindowID(window) == event.window.windowID) { 
          running = false; 
         } else { 
          SDL_HideWindow(window2); 
         } 
        } 
       } else if (event.type == SDL_MOUSEBUTTONDOWN) { 
        SDL_ShowWindow(window2); 
       } 
      } 
     } 
    } 

    SDL_DestroyWindow(window); 
    SDL_DestroyWindow(window2); 

    SDL_Quit(); 

    return 0; 
} 

答えて

2

これはまたはthis patchで固定されていない場合がありSDL bugです。

+0

詳細はこちら –

+0

私はこのプロジェクトをもう使用しないので、私のバグが修正されているかどうかテストできません。バグの説明を考えればそうだと思います。ご協力ありがとうございました。 –

0

あなたが他の上に第二のウィンドウを配置するSDL_RaiseWindowを呼び出す必要があります。 lazyfoo'sから伝説のSDLチュートリアル:

void LWindow::focus() 
{ 
//Restore window if needed 
if(!mShown) 
    SDL_ShowWindow(mWindow); 

//Move window forward 
SDL_RaiseWindow(mWindow); 
} 
+0

ありがとうございますが、ウィンドウが作成されていないので、動作しません。 –

+0

コード例を意味しますか?その答えを説明するはずです。 SDL_RowiseWindow関数呼び出しは、SDL_ShowWindowの後に追加する必要があります。 –

+0

いいえ、「ウインドウが作成されていない」という*によってウインドウマネージャー(Wayland)にウインドウが表示されないことを意味します。 'SDL_RaiseWindow'が存在しないウィンドウを生成する可能性はありません。とにかく成功していないと試してみました... –

関連する問題