Как получить SDL, чтобы понять разницу между коснувшись письмо с крышками привязываться и крышки блокировки от, или, сдвиг + «а» = «A» или что сдвиг + «1» = «! ' ... и т.д.?Как обрабатывать заглавные нажатия клавиш в SDL?
2
A
ответ
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;
}