Uint32 | type | SDL_DROPFILE, SDL_DROPTEXT, SDL_DROPBEGIN, または SDL_DROPCOMPLETE |
Uint32 | timestamp | イベントのタイムスタンプ |
char* | file | ファイル名. SDL_free()で解放する必要がある. SDL_DROPBEGIN, SDL_DROPCOMPLETEのときはNULL |
Uint32 | windowID | もしあればドロップしたウィンドウ |
// サンプルプログラム:
// 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, SDL_DROPTEXT, SDL_DROPBEGIN, またはSDL_DROPCOMPLETEのとき報告される. イベントのdropフィールドからアクセスできる.
これらのイベントはデフォルトで有効である. SDL_EventState()で無効にできる.
もしこれらのイベントを有効にしたならば, イベントでSDL_free()を使ってfilenameを解放する必要がある.
SDL_DROPTEXT, SDL_DROPBEGIN, そしてSDL_DROPCOMPLETEはSDL 2.0.5以降で使える.