Ce programme montre comment il est possible de récupérer des informations provenant de l'utilisateur lorsqu'il utilise son clavier, sa souris ou lorsqu'il valide une chaîne de caractères à l'aide d'une boîte de saisie sans bloquer l'exécution du programme.
Pour cela il utilise le système d'évènements de la bibliothèque MLV :
À chaque fois qu'un utilisateur déplace la sourris, appuie sur les touches d'un clavier, ou entre du texte dans une boîte de saisie, un événèment est créé par la bibliothèque MLV. Cet évènement est placé dans une file d'attente. Il est possible de récupérer toutes les informations concernant ces évènements en appelant la fonction MLV_get_event(). Cette fonction supprime le dernier évènement de la pile, l'analyse et renvoie, à l'aide de ses paramètres et de sa valeur de retour, toutes les informations le concernant.
#include <stdlib.h>
#include <stdio.h>
void affichage(
int nb_touche, int nb_mouse_click, int nb_mouse_motion,
int x, int y, char* texte1, char* texte2,
int width, int height
){
int taille_interlinge = 5;
10,160,
"Lorsque vous cliquez sur une boîte de saisie,\nles évènements concernant le clavier et la souris\nne sont plus transmis à l'utilisateur.",
taille_interlinge,
);
10, 40,
"Nombre de fois que l'on a appuyé sur une touche : %i",
);
10, 60,
"Nombre de fois que la souris a bougé : %i",
);
10, 80,
"Nombre de click de souris : %i",
);
x, y,
"(%d,%d)",
);
10, 140,
texte1,
);
220, 140,
texte2,
);
}
int main(int argc, char *argv[]){
int width = 640, height = 460;
int x=0,y=0;
char* texte = NULL;
char *texte1, *texte2;
int nb_touche = 0;
int nb_mouse_click = 0;
int nb_mouse_motion = 0;
int quit = 0;
10, 100,
200, 30,
);
texte1 = (char*) malloc( sizeof(char) ); *texte1 = '\0';
220, 100,
200, 30,
);
texte2 = (char*) malloc( sizeof(char) ); *texte2 = '\0';
affichage(
nb_touche, nb_mouse_click, nb_mouse_motion, x, y,
texte1, texte2, width, height
);
do {
&sym, &mod, NULL,
&texte, &input_box,
&x, &y, NULL,
&state
);
switch( event ){
break;
nb_touche = nb_touche + 1;
}
break;
if( input_box == input_box_1 ){
free( texte1 );
texte1 = texte;
}
if( input_box == input_box_2 ){
free( texte2 );
texte2 = texte;
}
break;
nb_mouse_click = nb_mouse_click + 1;
}
break;
nb_mouse_motion = nb_mouse_motion + 1;
break;
default :
fprintf(
stderr,
"Erreur : la valeur de l'évènement récupéré est impossible."
);
quit = 1;
}
affichage(
nb_touche, nb_mouse_click, nb_mouse_motion, x, y,
texte1, texte2, width, height
);
} while( ! quit );
return 0;
}