2013-07-22 1 views

ответ

0

Сначала добавьте эту команду: SDL_EnableUNICODE(SDL_ENABLE); , которая в основном позволяет СДЛ распознавать разницу между прописными и строчными и даже разница между держа Shiftand аа характер (например, сдвиг + «а» = «A» или Shift + «1 '= '') После этого, если вы знаете, как извлечь обычные ключи (event.key.keysym.sym), просто используйте event.key.keysym.unicode вместо

Например:

#include <string> 
#include <iostream> 
using namespace std; 

string stringinput() 
{ 
    string input; 
    SDL_EnableUNICODE(SDL_ENABLE); 
    SDL_Event uin; 
    while(!(uin.type==SDL_KEYDOWN&&uin.key.keysym.sym==SDLK_RETURN)) 
    { 
     while(SDL_PollEvent(&uin)) 
     { 
      if(uin.type==SDL_KEYDOWN) 
      { 
       if((uin.key.keysym.unicode>='A'&&uin.key.keysym.unicode<='Z') 
       ||(uin.key.keysym.unicode>='a'&&uin.key.keysym.unicode<='z') 
       ||(uin.key.keysym.unicode>='0'&&uin.key.keysym.sym<='9') 
       ||(uin.key.keysym.unicode==SDLK_SPACE)) 
       { 
        input+=((char)uin.key.keysym.unicode); 
       } 
       else 
       { 
        switch((unsigned int)uin.key.keysym.unicode) 
        { 
        case SDLK_BACKSPACE: 
         input.erase(input.size()-1); 
        break; 
        } 
       } 
      } 
     } 
    } 
    SDL_EnableUNICODE(SDL_DISABLE); 
    return input; 
} 
int main() 
{ 
    string mystring=stringinput(); 
    cout<<mystring; 
    while(1); 
    return 0; 
}