Console: Clavier et Souris

Description

Bonjour,

La console est souvent considérée comme une simple sortie (output) séquentielle un peu démodé.
Mais beaucoup de gens l'utilisent encore aujourd'hui, car pour afficher un simple résultat, elle est bien suffisante.

Parfois, on aimerait ajouter une certaine "interactivité" en utilisant l'entrée (input).
Par exemple, on demande de choisir une option en tapant un caractère:
- tapez '1' pour faire ceci.
- tapez '2' pour faire cela.
- tapez '3' pour ...

Et quelquefois, on voudrait même pouvoir désigner un caractère ou un emplacement de caractère sur la console.
Cette possibilité n'est que très rarement envisagée, car on pense que c'est impossible, ou du moins compliqué à faire.

J'espère que le code suivant (réduit à l'essentiel) vous montrera quelques autres possibilités de la console, du clavier et à la souris:
#include <windows.h>
#include <stdio.h>

void main() {
  DWORD nIn;
  INPUT_RECORD inR[32];
  SetConsoleTitle("Console: Clavier et Souris");
  HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
  SetConsoleMode(hIn, ENABLE_WINDOW_INPUT|ENABLE_MOUSE_INPUT);
  while (1) {
    ReadConsoleInput(hIn, inR, 32, &nIn);
    for (unsigned int i = 0; i < nIn; ++i)
      if (inR[i].EventType == KEY_EVENT) {
        KEY_EVENT_RECORD k = inR[i].Event.KeyEvent;
        if (k.bKeyDown) printf("Key: '%c'=%i=0X%xn", k.uChar, k.uChar, k.uChar);
      } else if (inR[i].EventType == MOUSE_EVENT) {
        MOUSE_EVENT_RECORD e = inR[i].Event.MouseEvent;
        short x = e.dwMousePosition.X, y = e.dwMousePosition.Y;
        if (e.dwEventFlags == 0) {
          if(e.dwButtonState == 1) printf("left button: x=%i, y=%in", x, y);
          if(e.dwButtonState == 2) printf("right button: x=%i, y=%in", x, y);
        } else if (e.dwEventFlags == DOUBLE_CLICK)
          printf("double click: x=%i, y=%in", x, y);
        else if (e.dwEventFlags == MOUSE_WHEELED)
          if ((int)e.dwButtonState >= 0) printf("vertical mouse wheel upn");
          else printf("vertical mouse wheel downn");
      }
  }
}
Remarque: les coordonnées [x,y] ne sont pas exprimées en pixels, mais en "caractères" [colonne (raw), ligne].
Le premier caractère de la console a donc les coordonnées [0,0].

Voir aussi: Console: dimension et fonte.

Bonne lecture ...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.