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

# SDL_DropEvent

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

## フィールド

Uint32 | type | SDL_DROPFILE
Uint32 | timestamp | イベントのタイムスタンプ
char* | file | ファイル名 SDL_free()で解放する必要がある

## サンプルコード

`

    // サンプルプログラム:
    // 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_DropEventはSDL_Eventのメンバで, typeがSDL_DROPFILEのとき報告される. イベントのdropフィールドからアクセスできる.

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

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

### Mac OS X

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

## 関連項目(列挙体)

SDL_EventType

## 関連項目(構造体)

SDL_Event

## 関連項目(関数)

SDL_EventState

## SDL Wikiへのリンク

SDL_DropEvent - SDL Wiki