Utiliser la Souris dans la console, un petit Paint.

Récupérer les coordonnées de la souris en console, et dessiner.

ReadConsoleInput

Voir version :

Pas de dépendances

Télécharger :

#include <windows.h>
#include <stdio.h>

void Color(int flags)
{
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(H,(WORD)flags);
}

void Locate(int x,int y)
{
    HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD C;
    C.X=(SHORT)x;
    C.Y=(SHORT)y;
    SetConsoleCursorPosition(H,C);
}

int main ()
{
    HANDLE H; 
    DWORD fdwMode;
    DWORD i,nb;
    int continuer = 1;
    int couleur = 1;
    INPUT_RECORD record[200];
    H = GetStdHandle(STD_INPUT_HANDLE); 
    fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT; 
    SetConsoleMode(H, fdwMode);
    do
    {
        ReadConsoleInput(H,record,200,&nb);
        for(i=0;i<nb;i++)
        {
            if (record[i].EventType == MOUSE_EVENT)
            {
                switch (record[i].Event.MouseEvent.dwButtonState)
                {
                case FROM_LEFT_1ST_BUTTON_PRESSED:
                    Locate(record[i].Event.MouseEvent.dwMousePosition.X,record[i].Event.MouseEvent.dwMousePosition.Y);
                    Color(0x10*couleur);
                    printf(" ");
                    break;
                case RIGHTMOST_BUTTON_PRESSED:
                    couleur++;
                    if (couleur==16)
                        couleur = 0;
                    break;
                case FROM_LEFT_2ND_BUTTON_PRESSED:
                    continuer = 0;
                    break;
                default:
                    break;
                }
            }
        }
    } while(continuer);
    return 0;
}



Commentaires

	Un simple programme pour lire les coordonnées de la souris en console, et dessiner des carrés.

	Utilisation :
	Cliquez avec le bouton gauche pour dessiner, avec le bouton droit pour changer de couleur, avec le bouton du milieu pour quitter.

	Si on regarde le main :
	Première chose à faire, il faut qu'on dise à la console qu'on utilisera la souris. 
	Donc un SetConsoleMode avec les flags ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT

	Ensuite, on fait un tableau de INPUT_RECORD : ce sont des évênements clavier/souris.
	On utilise un tableau car on peut avoir plusieurs évênements qui arrivent en même temps. 
	Mais dans les faits, on n'en aura jamais 200 en même temps, j'ai donc fait très large.

	Puis je rentre dans ma boucle principale.
	Je lis les évêments grâce à ReadConsoleInput. Je récupère le tableau, sa taille dans nb depuis le handle H de la console.

	Puis je fais un for sur les évnêments lus. S'il n'y en a pas on ne rentre pas dans le for.

	Pour chaque event, je regarde s'il est du type souris. (il pourrait être clavier, menu déroulant...)
	https://msdn.microsoft.com/en-us/library/windows/desktop/ms683499(v=vs.85).aspx

	je switch sur le bouton enfoncé : notez ici que ce sont des flags :
	https://msdn.microsoft.com/en-us/library/windows/desktop/ms684239(v=vs.85).aspx

	Je pourrais donc très bien avoir : FROM_LEFT_1ST_BUTTON_PRESSED|RIGHTMOST_BUTTON_PRESSED

	Si j'appuie sur le bouton de gauche, je dessine : je prends la couleur courante, la coordonnée de la souris, et j'écris un espace.
	A la fonction Color, je passe le BACKGROUND color. 0x10*couleur.

	Si j'appuie à droite, j'incrémente les couleurs, et je reviens à 0 si j'arrive à 16 pour que ce soit cyclique.

	Sur la molette, je sors.


Laissez un commentaire / post a comment