Console: Clavier et Souris

Soyez le premier à donner votre avis sur cette source.

Vue 3 990 fois - Téléchargée 444 fois

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

Ajouter un commentaire

Commentaires

Messages postés
314
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2020
2
Bonjour William Voirol et bonjour Tous,
Bravo, c'est intéressant.
Et j'ajoute que Vincent Godin à l'adresse suivante :
http://www.codeproject.com/Articles/16431/Add-color-to-your-std-cout
nous montre comment afficher en couleurs les caractères sur la console.
Messages postés
261
Date d'inscription
mardi 12 décembre 2006
Statut
Membre
Dernière intervention
10 juin 2019
>
Messages postés
314
Date d'inscription
samedi 18 décembre 2004
Statut
Membre
Dernière intervention
12 juin 2020

Bonjour pg|10,

Je vous remercie pour votre message et votre référence
Add color to your std::cout
qui est très intéressante.

Je suis entrain de préparer un troisième article sur la console qui, je l'espère, facilitera à beaucoup de lecteurs l'utilisation de la couleur.

J'insisterai sur la couleur de fond (background), car beaucoup d'auteurs ont plutôt tendance à la négliger.

D'ailleurs, les codes proposés sous Console: dimension et fonte et Jeu de la vie en mini n'utilisent que cette possibilité et n'y écrivent aucun caractère.

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.