SDLでイベント処理

前回の続きです。



今度のプログラムは、キーボードを押すと画面を白く塗ります。

マウスボタンを押すと、画面を青く塗ります。

#include <SDL/SDL.h>

#pragma comment(lib,"SDL.lib")
#pragma comment(lib,"SDLmain.lib")

#define WIDTH 320  //横幅
#define HEIGHT 240 //高さ
#define BPP 32     //1ピクセルのビット数

#define FLG_INIT    (SDL_INIT_VIDEO)

static SDL_Surface *screen; //ビデオポインタ

bool init(void);    //初期化
void run(void);        //メイン処理
void quit(void);    //終了処理

int main(int argc, char *argv[])
{    
    if( init() )run();
    quit();
    
    return 0;
}

bool init(void)
{
    //    ライブラリを初期化する
    if(SDL_Init(FLG_INIT) < 0) {
        printf("初期化に失敗");
        return false;
    }
    //    ビデオモードを設定する
    screen = SDL_SetVideoMode(WIDTH,HEIGHT,
                        BPP, SDL_SWSURFACE );
    if( screen == NULL) {
        printf("VideoInitialize Error");
        return false;
    }
    return true;
}

void run(void)
{
    SDL_Event ev;
    
    //    次のイベントが来るまで無限に待機
    while( SDL_WaitEvent(&ev) ) {
        switch(ev.type){
        case SDL_QUIT:        //ウィンドウの×ボタン
            printf("QUIT\n");
            return;
        case SDL_KEYDOWN:    //キーダウン
            printf("KeyDonw\n");
            SDL_FillRect(screen,NULL,0xffffff);
            break;
        case SDL_MOUSEBUTTONDOWN://マウスダウン
            printf("MouseDown\n");
            SDL_FillRect(screen,NULL,0x007fff);
            break;
        default:break;        //それ以外のイベントは無視する
        }

        SDL_Flip(screen);
    }
}

void quit(void)
{
    if(screen != NULL)
    {
        SDL_FreeSurface( screen );
    }
    SDL_Quit();
}