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

# SDL_CreateWindow

位置, 大きさ, フラグを指定してウィンドウを生成する

## 構文

`SDL_Window* SDL_CreateWindow(const char* title, int x, int y, int w, int h, Uint32 flags)`

## 引数

title | UTF-8文字列のウィンドウのタイトル
x | ウィンドウのスクリーン座標系のX座標, SDL_WINDOWPOS_CENTERED, または SDL_WINDOWPOS_UNDEFINED
y | ウィンドウのスクリーン座標系のY座標, SDL_WINDOWPOS_CENTERED, または SDL_WINDOWPOS_UNDEFINED
w | ウィンドウのスクリーン座標系の幅
h | ウィンドウのスクリーン座標系の高さ
flags | 0 または 1つ以上のSDL_WindowFlags列挙体の論理和

## 戻り値

生成されたウィンドウを戻す. 失敗のときNULLを戻す. SDL_GetError()を呼んで詳細を知ることができる.

## サンプルコード

``

    // サンプルプログラム:
    // SDL2でアプリケーションウィンドウを生成する

    #include "SDL.h"
    #include <stdio.h>

    int main(int argc, char* argv[]) {

        SDL_Window *window;                    // ポインタを宣言する

        SDL_Init(SDL_INIT_VIDEO);              // SDL2を初期化する

        // 次の設定でアプリケーションウィンドウを生成する:
        window = SDL_CreateWindow(
            "An SDL2 window",                  // ウィンドウのタイトル
            SDL_WINDOWPOS_UNDEFINED,           // X座標の初期値
            SDL_WINDOWPOS_UNDEFINED,           // Y座標の初期値
            640,                               // 幅のピクセル数
            480,                               // 高さのピクセル数
            SDL_WINDOW_OPENGL                  // フラグ
        );

        // ウィンドウの生成に成功したかチェックする
        if (window == NULL) {
            // ここを通ったならばウィンドウを生成できなかった...
            printf("ウィンドウを生成できなかった: %s\n", SDL_GetError());
            return 1;
        }

        // ウィンドウが開いた: ここでプログラムループに入る (SDL_PollEvent()を参照すること)

        SDL_Delay(3000);  // 例として3000ミリ秒間停止する

        // ウィンドウを閉じて破棄する
        SDL_DestroyWindow(window);

        // 終了処理
        SDL_Quit();
        return 0;
    }

## 詳細

SDL_CreateWindow()ではSDL_WINDOW_SHOWNは無視される. SDL_WindowはSDL_WINDOW_HIDDENが設定されない限り表示される. SDL_WINDOW_SHOWNはSDL_GetWindowFlags()で問い合わせたとき使われる.

AppleのmacOSでは, Info.plistのNSHighResolutionCapableプロパティは必ずYESでなければならない. そうしなければ高DPI OpenGL キャンバスを受信できない.

高DPIに対応した環境(iOSやOS X)でSDL_WINDOW_ALLOW_HIGHDPIを指定してウィンドウを生成した場合, スクリーン座標系のウィンドウサイズは, ピクセル数のウィンドウサイズと異なる場合がある. SDL_GL_GetDrawableSize()またはSDL_GetRendererOutputSize()でピクセル数のクライアントサイズを得ることができる.

フルスクリーンの設定をした場合, 幅と高さの引数であるwとhは使われない. しかし, 不正なサイズの引数(例えば大きすぎる)の場合は失敗する. 全ての環境でのウィンドウサイズの事実上の限界は16384×16384である.

SDL_WINDOW_OPENGLまたはSDL_WINDOW_VULKANフラグを指定してウィンドウを生成すると, 一致するLoadLibrary関数(SDL_GL_LoadLibrary()またはSDL_Vulkan_LoadLibrary())が呼び出され, SDL_DestroyWindow()で一致するUnloadLibrary関数が呼ばれる.

SDL_WINDOW_VULKANを指定してVulkanドライバが動作しなかった場合, SDL_Vulkan_LoadLibrary()が失敗するためSDL_CreateWindow()も失敗する.

Metalに対応していないOSでSDL_WINDOW_METALを指定した場合, SDL_CreateWindow()は失敗する.

Appleデバイス以外の場合, SDLはVulkanローダをリンクしないか, 動的リンクライブラリ版のリンクを要求する. 後のバージョンのSDLではこの制約はなくなる予定である.

## バージョン

SDL 2.0.0以降

## 関連項目(関数)

SDL_CreateWindowFrom
SDL_DestroyWindow

## SDL Wikiへのリンク

SDL_CreateWindow - SDL Wiki