SDL2新手入门 —— 鼠标事件

SDL2 阅读(166)

# 鼠标事件  
鼠标事件有三种类型 :  

| 事件名称      | type值                 | 采用的结构体名 | SDL_Event成员名 |
| :-           | :-                     | :- | :- |
| 鼠标移动事件  | `SDL_MOUSEMOTION`      | [`SDL_MouseMotionEvent`](http://wiki.libsdl.org/SDL_MouseMotionEvent) | motion |
| 鼠标按键事件  | `SDL_MOUSEBUTTONDOWN`  | [`SDL_MouseButtonEvent`](http://wiki.libsdl.org/SDL_MouseButtonEvent) | button |
|              | `SDL_MOUSEBUTTONUP`    |                                                                       |        |
| 鼠标滚动事件  | `SDL_MOUSEWHEEL`       | [`SDL_MouseWheelEvent`](http://wiki.libsdl.org/SDL_MouseWheelEvent)   | wheel  |

* `motion`中,`x`和`y`表示坐标,`xrel`和`yrel`表示移动的距离。
* `button`中,`button`表示点击的哪个按键,`clicks`表示连点了多少次。
* `wheel`中,`x`表示横向滚了多少,`y`表示纵向滚了多少。

## 一个完整的鼠标事件处理示例代码
```C
#include <SDL2/SDL.h>
 
int main(int argc,char* argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Window* win = SDL_CreateWindow("SDL2",SDL_WINDOWPOS_CENTERED,
                                        SDL_WINDOWPOS_CENTERED,640,400,0);
    SDL_Renderer* renderer = SDL_CreateRenderer(win,-1,SDL_RENDERER_ACCELERATED);
 
    SDL_Rect rect = {0,0,50,50};
    Uint8 r=0xff,g=0xff,b=0xff;
    SDL_Event e;
    while(1)
    {
        SDL_SetRenderDrawColor(renderer,0,0,0,0);
        SDL_RenderClear(renderer);
        SDL_SetRenderDrawColor(renderer,r,g,b,0);
        SDL_RenderFillRect(renderer,&rect);
        SDL_RenderPresent(renderer);
 
        if(0 == SDL_PollEvent(&e))
        {
            continue;
        }
        else if(e.type == SDL_QUIT)
        {
            break;
        }
        else if(e.type == SDL_MOUSEMOTION)
        {
            rect.x = e.motion.x;
            rect.y = e.motion.y;
        }
        else if(e.type == SDL_MOUSEBUTTONUP)
        {
            r = e.button.button == SDL_BUTTON_LEFT   ? 0xff : 0;
            g = e.button.button == SDL_BUTTON_MIDDLE ? 0xff : 0;
            b = e.button.button == SDL_BUTTON_RIGHT  ? 0xff : 0;
        }
        else if(e.type == SDL_MOUSEWHEEL)
        {
            rect.w += e.wheel.y;
            rect.h += e.wheel.y;
 
        }
    }
     
    return 0;
}
```

Markdown使用 帮助


匿名

今天的风儿甚为喧嚣呢。

匿名

今天的风儿甚为喧嚣呢。

匿名

今天的风儿甚为喧嚣呢。

匿名

好!顶!赞!

匿名

爆ぜろリアル  弾けろシナプス   バニッシュメント・ディス・ワールド!