Dessin avec la souris

Voir le sujet précédent Voir le sujet suivant Aller en bas

Dessin avec la souris

Message par Admin le Lun 16 Jan - 19:15

Dans ce programme, nous allons voir les possibilités de dessiner en utilisant la souris. Nous nous contenterons d'allumer un pixel avec une couleur et de dessiner une droite en choisissant le point de départ et le point d'arrivée par un clic de la souris. Mais nous ne pouvons pas les dessiner directement sur l'écran dans la partie paint car à chaque rafraichissement de la fenêtre, nous allons perdre les éléments dessinés à l'aide de la souris. Nous allons donc devoir creer une image en mémoire sur laquelle nous pourrons dessiner puis dans la partie paint recopier cette image sur l'écran.
La structure de création de la fenêtre de base  est identique au programme précédant.
Dans la partie création, nous appelons une sous procédure de création du menu dessiner avec 3 sous menus : dessiner un pixel, dessiner une droite et quitter. Nous appelons ensuite la sous procédure creationcontexte dans laquelle nous commençons par créer une image par la fonction CreateBitmap. Nous créons ici une image plus petite que la fenêtre et sa couleur nécessite de lui passer en paramètre une zone décrivant la couleur de chaque pixel. Ici nous lui passons une zone de la taille de l'image de double mots contenant la valeur 0FFFFh.  Puis nous créons un contexte d'affichage en mémoire par la fonction CreateCompatibleDC et nous lui rattachons l'image créee par la fonction SelectObject.
Toujours dans la partie création, nous appelons la sous procèdure dessin pour dessiner une ellipse dans le contexte d'affichage en mémoire précédemment crée.
Dans la partie paint, nous nous contentons de recopier l'image du contexte mémoire dans le contexte d'affichage de l'écran par la fonction BitBlt. Vous remarquerez que cette fonction permet de recopier une partie de l'image et de la positionner sur l'écran où vous voulez.
Dans la partie commande, nous gérons les sous menus de dessiner : nous positionnons des tops pour indiquer si l'utilisateur a choisi le menu pixel ou le menu droite.
Maintenant, il ne nous reste plus qu'à gérer les clics des boutons de la souris. Pour cela nous ajoutons le tests des messages Windows suivants WM_LBUTTONDOWN et WM_RBUTTONDOWN en début de la procèdure de gestion des événements de la fenêtre.
Si le bouton gauche est appuyé, nous récupérons dans les bits hauts et bas du 4ième paramètres (Lparam) la position en x et y du curseur de la souris. Ensuite nous testons les tops pour savoir s'il faut dessiner un pixel ou s'il s'agit du début de la droite.
Si le bouton droit est appuyé, nous vérifions que l'utilisateur veut dessiner une droite et si le point de départ a bien été enregistré puis nous définissons la couleur de la droite en créant un crayon de couleur verte et nous le sélectionnons. Ensuite nous créons la droite avec les 2 fonctions déjà vues (MoveToEx  et LineTo) mais en utilisant le contexte d'affichage mémoire. Nous appelons la fonction InvalidateRect pour indiquer à Windows, qu'il faut redessiner la fenêtre, ce qu'il fera en envoyons le message WM_PAINT que nous récupérerons pour appeler la partie paint qui effectuera la copie du contexte mémoire dans le contexte d'affichage de l'écran et le tour est joué.
Pour la partie affichage du pixel, nous nous contentons de choisir une couleur (rouge) et nous appelons la fonction SetPixel avec les coordonnées du clic de la souris puis la fonction InvalidateRect comme ci dessus.
Lors de l'exécution, il faut bien regarder car les pixels allumés sont très petits !! Vous remarquerez que le changement de la taille de la fenêtre laisse les dimensions de l'image inchangées.
Comme exercice, vous pouvez ajouter au menu un sous menu Enregistrer et écrire une procédure d'écriture de l'image BitMap ainsi créee dans un fichier. Remarque : L'Api  Windows ne connait que le format d'image bmp.
Voilà le résultat avec des pixels en haut à droite de l’ellipse et des droites.
Fichiers joints
fenetredessinsouris.zip Vous n'avez pas la permission de télécharger les fichiers joints.(12 Ko) Téléchargé 0 fois
avatar
Admin
Admin

Messages : 37
Date d'inscription : 28/11/2016

Voir le profil de l'utilisateur http://assembleur64.forumactif.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum