Moi je récupère les caractère par IEvent Receiver :
IEventReceiver pour chat:
class MyEventReceiver : public IEventReceiver
{
public:
virtual bool OnEvent(SEvent event)
{
if (camera != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT)
{
switch(event.KeyInput.Key)
{ }
}
if (event.EventType == irr::EET_KEY_INPUT_EVENT &&
event.KeyInput.PressedDown)
{
switch(event.KeyInput.Key)
{
case KEY_KEY_A:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "a");
if(shift==1){
strcat(chat_scan, "A");
shift=0;
}
break;
case KEY_KEY_B:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "b");
if(shift==1){
strcat(chat_scan, "B");
shift=0;
}
}
break;
case KEY_KEY_C:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "c");
if(shift==1){
strcat(chat_scan, "C");
shift=0;
}
}
break;
case KEY_KEY_D:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "d");
if(shift==1){
strcat(chat_scan, "D");
shift=0;
}
}
break;
case KEY_KEY_E:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "e");
if(shift==1){
strcat(chat_scan, "E");
shift=0;
}
}
break;
case KEY_KEY_F:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "f");
if(shift==1){
strcat(chat_scan, "F");
shift=0;
}
}
break;
case KEY_KEY_G:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "g");
if(shift==1){
strcat(chat_scan, "G");
shift=0;
}
}
break;
case KEY_KEY_H:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "h");
if(shift==1){
strcat(chat_scan, "H");
shift=0;
}
}
break;
case KEY_KEY_I:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "i");
if(shift==1){
strcat(chat_scan, "I");
shift=0;
}
}
break;
case KEY_KEY_J:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "j");
if(shift==1){
strcat(chat_scan, "J");
shift=0;
}
}
break;
case KEY_KEY_K:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "k");
if(shift==1){
strcat(chat_scan, "K");
shift=0;
}
}
break;
case KEY_KEY_L:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "l");
if(shift==1){
strcat(chat_scan, "L");
shift=0;
}
}
break;
case KEY_KEY_M:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "m");
if(shift==1){
strcat(chat_scan, "M");
shift=0;
}
}
break;
case KEY_KEY_N:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "n");
if(shift==1){
strcat(chat_scan, "N");
shift=0;
}
}
break;
case KEY_KEY_O:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "o");
if(shift==1){
strcat(chat_scan, "O");
shift=0;
}
}
break;
case KEY_KEY_P:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "p");
if(shift==1){
strcat(chat_scan, "P");
shift=0;
}
} else {
if(armee==0)
armee=1;
else
armee = 0;
}
break;
case KEY_KEY_Q:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "q");
if(shift==1){
strcat(chat_scan, "Q");
shift=0;
}
}
break;
case KEY_KEY_R:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "r");
if(shift==1){
strcat(chat_scan, "R");
shift=0;
}
}
break;
case KEY_KEY_S:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "s");
if(shift==1){
strcat(chat_scan, "S");
shift=0;
}
}
break;
case KEY_KEY_T:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "t");
if(shift==1){
strcat(chat_scan, "T");
shift=0;
}
}
break;
case KEY_KEY_U:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "u");
if(shift==1){
strcat(chat_scan, "U");
shift=0;
}
}
break;
case KEY_KEY_V:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "v");
if(shift==1){
strcat(chat_scan, "V");
shift=0;
}
}
break;
case KEY_KEY_W:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "w");
if(shift==1){
strcat(chat_scan, "W");
shift=0;
}
}
break;
case KEY_KEY_X:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "x");
if(shift==1){
strcat(chat_scan, "X");
shift=0;
}
}
break;
case KEY_KEY_Y:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "y");
if(shift==1){
strcat(chat_scan, "Y");
shift=0;
}
}
break;
case KEY_KEY_Z:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, "z");
if(shift==1){
strcat(chat_scan, "Z");
shift=0;
}
}
break;
case KEY_SPACE:
if(enter==1)
strcat(chat_scan, " ");
break;
case KEY_NUMPAD0:
if(enter==1)
strcat(chat_scan, "0");
break;
case KEY_NUMPAD1:
if(enter==1)
strcat(chat_scan, "1");
break;
case KEY_NUMPAD2:
if(enter==1)
strcat(chat_scan, "2");
break;
case KEY_NUMPAD3:
if(enter==1)
strcat(chat_scan, "3");
break;
case KEY_NUMPAD4:
if(enter==1)
strcat(chat_scan, "4");
break;
case KEY_NUMPAD5:
if(enter==1)
strcat(chat_scan, "5");
break;
case KEY_NUMPAD6:
if(enter==1)
strcat(chat_scan, "6");
break;
case KEY_NUMPAD7:
if(enter==1)
strcat(chat_scan, "7");
break;
case KEY_NUMPAD8:
if(enter==1)
strcat(chat_scan, "8");
break;
case KEY_PERIOD:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, ".");
}
break;
case KEY_DECIMAL :
if(enter==1)
{
strcat(chat_scan, ".");
}
break;
case KEY_SHIFT:
if(enter==1)
{
if(shift==0)
shift=1;
else
shift=0;
}
break;
case KEY_COMMA:
if(enter==1)
{
if(shift==0)
strcat(chat_scan, ",");
if(shift==1)
{
strcat(chat_scan, "?");
shift=0;
}
}
break;
case KEY_KEY_4:
if(enter=1)
strcat(chat_scan, "'");
break;
case KEY_RETURN:
if(enter==0){
enter=1;
strcat(chat_scan, pseudo);
strcat(chat_scan, " : ");
}
else
{
rakClientInterface->RPC("PrintMessage", chat_scan, (strlen(chat_scan)+1)*8, HIGH_PRIORITY, RELIABLE_ORDERED, 0, false);
strcpy(chat_scan, chat_clear);
enter=0;
}
break;
}
}
if ((event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN))
{
}
if ((event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN))
{
}
if ((event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP))
{
}
return false;
}
};
Ca me permet d'écrire sommairement, avec une gestion des Majuscules un peu foireuse (Une sorte de Key-Lock qui se déloque une fois le caractère entré). Seul GROS problème, je n'arrive pas a gerer l'éffacement du dernier caractère avec la touche Retour :s
Ce chat tourne sous RakNet