目次 - API(機能別) - イベント処理 - SDL_DropEvent

SDL_DropEvent

ドラッグ&ドロップイベントの情報の構造体

フィールド

Uint32typeSDL_DROPFILE, SDL_DROPTEXT, SDL_DROPBEGIN, または SDL_DROPCOMPLETE
Uint32timestampイベントのタイムスタンプ
char*fileファイル名. SDL_free()で解放する必要がある. SDL_DROPBEGIN, SDL_DROPCOMPLETEのときはNULL
Uint32windowIDもしあればドロップしたウィンドウ

サンプルコード

// サンプルプログラム:
// SDL_DropEventの使い方

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

int main(int argc, char *argv[]) {
    SDL_Window *window;
    SDL_Event event;                        //  イベントハンドルの宣言
    char* dropped_filedir;                  //  ドロップされたファイルとディレクトリへのポインタ

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

    window = SDL_CreateWindow(  //  ウィンドウを生成する
        "SDL_DropEventの使い方 このウィンドウにファイルをドロップしてください",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        640,
        480,
        SDL_WINDOW_OPENGL
    );

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

    SDL_EventState(SDL_DROPFILE, SDL_ENABLE);

    for(;;) {                               //  プログラムループ
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
                case (SDL_QUIT): {          //  終了の場合
                    return 0;               //  終了処理は省略する
                }

                case (SDL_DROPFILE): {      //  ファイルがドロップされたとき
                    dropped_filedir = event.drop.file;
                    //  ドロップされたファイルとディレクトリを表示する
                    SDL_ShowSimpleMessageBox(
                        SDL_MESSAGEBOX_INFORMATION,
                        "ウィンドウにドロップされたファイル",
                        dropped_filedir,
                        window
                    );
                    SDL_free(dropped_filedir);    //  dropped_filedirのメモリを解放する
                    break;
               }
            }
        }
        SDL_Delay(0);
    }

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

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

詳細

SDL_DropEventSDL_Eventのメンバで, typeがSDL_DROPFILE, SDL_DROPTEXT, SDL_DROPBEGIN, またはSDL_DROPCOMPLETEのとき報告される. イベントのdropフィールドからアクセスできる.

これらのイベントはデフォルトで有効である. SDL_EventState()で無効にできる.

もしこれらのイベントを有効にしたならば, イベントでSDL_free()を使ってfilenameを解放する必要がある.

SDL_DROPTEXT, SDL_DROPBEGIN, そしてSDL_DROPCOMPLETEはSDL 2.0.5以降で使える.

Mac OS X

SDLアプリケーションでドラッグ&ドロップを有効にするためには, 必ずinfo.plistファイルも編集しなければならない. Document Typesを追加/修正すること. 例えば, 全てのドキュメントタイプで有効にするためには, Document Types に "public.data" mime type を追加する必要がある.

バージョン

SDL 2.0.0以降

関連項目(列挙体)

SDL_EventType

関連項目(構造体)

SDL_Event

関連項目(関数)

SDL_EventState

SDL Wikiへのリンク

SDL_DropEvent - SDL Wiki