سلام!

جلسه ی پیش با event مربوط به بسته شدن پنجره آشنا شدیم. این جلسه می خواهیم با event های مربوط به ماوس آشنا شویم.

اوّلین event ای که می خواهیم با آن آشنا شویم، event مربوط به فشردن یکی از دکمه های ماوس است. اگر event.type برابر با SDL_MOUSEBUTTONDOWN باشد، یعنی یکی از دکمه های ماوس فشرده شده است. برای این که بفهمید کدام یکی از دکمه ها فشرده شده است، از مقدار موجود در event.button.button استفاده کنید. مثل برنامه ی زیر؛

if ( event.type == SDL_MOUSEBUTTONDOWN ){
    if ( event.button.button == SDL_BUTTON_LEFT )
        cout << "Left Button is Down" << endl;
    if ( event.button.button == SDL_BUTTON_RIGHT )
        cout << "Right Button is Down" << endl;
    if ( event.button.button == SDL_BUTTON_MIDDLE )
        cout << "Middle button is Down" << endl;
}

مفاهیم مربوط به فشردن دکمه های ماوس تمام شدند. حال نوبت رها کردن دکمه های ماوس است. اگر این event اتفاق بیافتد، مقدار event.type برابر با SDL_MOUSEBUTTONUP خواهد بود. دکمه ی مربوط به این event هم با استفاده از event.button.button قابل دسترسی است.

برای ماوس event دیگری هم وجود دارد به نام SDL_MOUSEMOTION که به معنای آن است که ماوس در حال حرکت است.

در صورتی که بخواهید مختصات ماوس را به دست بیاورید، می‌توانید از event.button.x و event.button.y استفاده کنید.

برنامه ی زیر مجموعه ای از event های مربوط به ماوس است.


#include "SDL/SDL.h"

#include <iostream>

using namespace std;

int main (){
    SDL_Init( SDL_INIT_EVERYTHING );
    
    SDL_Surface *screen = SDL_SetVideoMode( 640, 480, 32, SDL_HWSURFACE );
    if ( screen == NULL ){
        cout << SDL_GetError() << endl;
        SDL_Quit();
        return 0;
    }
    
    SDL_Event event;
    
    while ( 1 ){
        
        if ( SDL_PollEvent( &event ) ){
            if ( event.type == SDL_MOUSEBUTTONDOWN ){
                if ( event.button.button == SDL_BUTTON_LEFT )
                    cout << "Left button is down" << endl;
                if ( event.button.button == SDL_BUTTON_RIGHT )
                    cout << "Right button is down" << endl;
                if ( event.button.button == SDL_BUTTON_MIDDLE )
                    cout << "Middle button is down" << endl;
            }
            if ( event.type == SDL_MOUSEMOTION )
                cout << "Mouse is Moving" << endl;
            if ( event.type == SDL_MOUSEBUTTONUP ){
                if ( event.button.button == SDL_BUTTON_LEFT )
                    cout << "Left button is up" << endl;
                if ( event.button.button == SDL_BUTTON_RIGHT )
                    cout << "Right button is up" << endl;
                if ( event.button.button == SDL_BUTTON_MIDDLE )
                    cout << "Middle button is up" << endl;
            }
            if ( event.type == SDL_QUIT ){
                SDL_Quit();
                return 0;
            }
        }
    }
    SDL_Quit();
    return 0;

}

برای تمرین، برنامه ای بنویسید که مشخّص کند هنگام حرکت ماوس، کدام یک از دکمه های ماوس فشرده شده است.

موفق باشید!