SDL C鼠标/键盘输出

时间:2014-09-13 15:50:41

标签: c keyboard mouse sdl

有没有办法在C?中用sdl按键鼠标/键盘?

如果是,怎么样?

如果不是,你知道在C中有什么办法吗?

3 个答案:

答案 0 :(得分:3)

创建SDL_event结构并填写http://wiki.libsdl.org/SDL_KeyboardEventhttp://wiki.libsdl.org/SDL_Keysym中记录的字段,然后使用SDL_Pushevent()将事件放入事件队列: http://wiki.libsdl.org/SDL_PushEvent

 SDL_Event event;

 event.type = SDL_KEYDOWN;
 event.timestamp = lastEvent.timestamp + 1;
 event.windowID - lastEvent.windowID;
 event.state = SDL_PRESSED;

 event.keysym.scancode = SDL_SCANCODE_ESCAPE; // from SDL_Keysym
 event.keysym.sym = SDLK_ESCAPE;
 event.keysym.mod = 0; // from SDL_Keymod

 SDL_PushEvent(&Event) // Inject key press of the Escape Key

对SDL_Event联合中的任何其他事件执行相同的操作,包括鼠标事件:http://wiki.libsdl.org/SDL_MouseButtonEvent

答案 1 :(得分:2)

从SDL 2.0.3开始,SDL不支持将输入事件发送到其他应用程序。在Windows上,您可以使用the SendInput function将输入事件发送到其他应用程序。使用X11,您可以使用the xcb_send_event function。我对OS X,iOS或Android不确定。

答案 2 :(得分:0)

该程序演示了如何在SDL程序中读取鼠标和键盘输入。它将运行几秒钟,并显示"向上箭头"或"向下箭头"当按下其中任何一个键时,显示"鼠标点击"单击鼠标时的坐标。

#include "SDL2/SDL.h"
#include <stdlib.h>

int main(){
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window *window = SDL_CreateWindow( "Keyboard and mouse input",
                         SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 
                         500, 500, SDL_WINDOW_SHOWN );
    int i;
    for (i = 0; i< 3000; i++){
        SDL_UpdateWindowSurface(window);
        SDL_Event event;
        while (SDL_PollEvent(&event)){//this is where the important stuff happens:
            if( event.type == SDL_KEYDOWN ) {
                switch( event.key.keysym.sym ) { 
                    case SDLK_UP: 
                        puts("up arrow");
                        break;
                    case SDLK_DOWN://for full list of key names, http://www.libsdl.org/release/SDL-1.2.15/docs/html/sdlkey.html
                        puts("down arrow");
                        break;
                }
            }
            else if (event.type == SDL_MOUSEBUTTONDOWN){
                int x, y;

                SDL_GetMouseState(&x,&y);
                printf("%s button mouse clicked at: (%d,%d)\n",
                    (event.button.button == SDL_BUTTON_LEFT)? "left" : "right",
                    x,y);
            }
        }
        SDL_Delay(1);
    }
    SDL_DestroyWindow(window);
    SDL_Quit();
}

这适用于SDL版本2

基本上,您需要调用 SDL_PollEvent ,然后检查生成的SDL_Event struct以获取有关它是键盘还是鼠标事件的信息,如果是,那么鼠标位于哪里是什么或按下了什么按钮。