目次 - API(機能別) - ディスプレイとウィンドウ - SDL_GetWindowWMInfo

SDL_GetWindowWMInfo

ウィンドウのドライバ固有の情報を得る

構文

SDL_bool SDL_GetWindowWMInfo(SDL_Window* window, SDL_SysWMinfo* info)

引数

window情報を求めるウィンドウ
infoウィンドウの情報を書き込むSDL_SysWMinfoのポインタ (詳細を参照すること)

戻り値

この関数が実装されていて, かつinfo構造体のバージョンが正しければSDL_TRUE, 情報が得られなければSDL_FALSEを戻す. SDL_GetError()を呼んで詳細を知ることができる.

サンプルコード

#include "SDL.h"
#include "SDL_syswm.h"

int main(int argc, char *argv[]) {
  SDL_Window* window;
  SDL_SysWMinfo info;

  SDL_Init(0);

  window = SDL_CreateWindow("", 0, 0, 0, 0, SDL_WINDOW_HIDDEN);

  SDL_VERSION(&info.version); /* info構造体をSDLのバージョンで初期化する */

  if(SDL_GetWindowWMInfo(window,&info)) { /* この関数は成功のとき真を戻す */
    /* 成功 */
    const char *subsystem = "不明なシステム!";
    switch(info.subsystem) {
      case SDL_SYSWM_UNKNOWN:   break;
      case SDL_SYSWM_WINDOWS:   subsystem = "Microsoft Windows(TM)";  break;
      case SDL_SYSWM_X11:       subsystem = "X Window System";        break;
#if SDL_VERSION_ATLEAST(2, 0, 3)
      case SDL_SYSWM_WINRT:     subsystem = "WinRT";                  break;
#endif
      case SDL_SYSWM_DIRECTFB:  subsystem = "DirectFB";               break;
      case SDL_SYSWM_COCOA:     subsystem = "Apple OS X";             break;
      case SDL_SYSWM_UIKIT:     subsystem = "UIKit";                  break;
#if SDL_VERSION_ATLEAST(2, 0, 2)
      case SDL_SYSWM_WAYLAND:   subsystem = "Wayland";                break;
      case SDL_SYSWM_MIR:       subsystem = "Mir";                    break;
#endif
#if SDL_VERSION_ATLEAST(2, 0, 4)
      case SDL_SYSWM_ANDROID:   subsystem = "Android";                break;
#endif
#if SDL_VERSION_ATLEAST(2, 0, 5)
      case SDL_SYSWM_VIVANTE:   subsystem = "Vivante";                break;
#endif
    }

    SDL_Log("このプログラムは SDL バージョン %d.%d.%d の %s で動作している", 
        (int)info.version.major,
        (int)info.version.minor,
        (int)info.version.patch,
        subsystem);
  } else {
    /* 呼び出し失敗 */
    SDL_LogError(SDL_LOG_CATEGORY_ERROR, "ウィンドウの情報を得られなかった: %s", SDL_GetError());
  }

  SDL_DestroyWindow(window);
  SDL_Quit();

  return 0;
}

詳細

SDL_SysWMinfoを定義するためSDL_syswm.hをインクルードする必要がある.

info構造体はSDLバージョンが初期化されている必要があり, それがあればウィンドウの情報がサンプルコードのように得られる.

バージョン

SDL 2.0.0以降

SDL Wikiへのリンク

SDL_GetWindowWMInfo - SDL Wiki