Dessin dans une fenêtre

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

Dessin dans une fenêtre

Message par Admin le Jeu 5 Jan - 18:48

Dans le traitement du message WM_PAINT des fenêtres précédentes, nous n'avons vu que l'écriture d'un simple texte. Dans ce programme, nous allons voir quelques possibilités de dessin offertes par l'API.
Nous repartons du programme de fenêtre simple et nous commençons par créer une brosse de couleur bleue pâle que nous allons mettre en fond de fenêtre. C'est la fonction CreateSolidBrush qui est utilisée et nous lui passons une couleur en hexadécimal (Bleu,Vert,Rouge   voir le codage des couleurs RGB). Nous conservons le handle retournée dans le registre r15 que nous passerons dans la zone wcex+WNDCLASSEX.hbrBackground lors de la création de la classe des fenêtres.
La déclaration de la fenêtre et la procédure de gestion des évenements restent inchangés et nous ajoutons dans la partie paint les instructions de dessin.
Nous commençons par tracer une ligne droite avec le crayon (pinceau!) par défaut donc en noir. Pour cela nous appelons la fonction MoveToEx avec les positions horizontales et verticales du début de ligne puis la fonction LineTo avec les positions de fin de la ligne.
Ensuite nous allons tracer une ligne en blanc. Nous récupérons le handle d'un crayon blanc (déjà défini par windows) par la fonction GetStockObject avec le paramètre WHITE_PEN. Et nous sélectionnons celui ci par la fonction SelectObject . Cette fonction retourne le handle de la sélection précédente (donc le crayon noir par défaut) que nous conservons pour le remettre en fin de dessin. Puis nous traçons une ligne avec les 2 fonctions précédentes (MoveToEx et LineTo).
Nous continuons par tracer un rectangle avec un bord noir et un fond par défaut (appelé brosse -bruch) ) qui est blanc !! en appelant la fonction ... Rectangle et en lui passant les 4 coordonnées des sommets du rectangle. Rien de bien compliqué !!
Puis dessinons une courbe de Beziers caractérisée par 3 points (ou si vous en voulez plus par un multiple de 3) Ces points sont déclarés dans une structure de type POINT où nous renseignons la position x et y de chaque point). Le traçage s'effectue par l'appel de la fonction PolyBezierTo en lui passant l'adresse du premier point et le nombre de points total.
Bon changeons de couleur de dessin. Comme il ny a pas par defaut de crayon vert, c'est à nous de le créer par la fonction CreatePen. Mais pluôt que de passer la couleur en un seul nombre hexadécimal, nous appelons d'abord la macro RGB (placée en début de ce programme) avec les valeurs des 3 couleurs en décimal. La macro calcule le code et le retourne dans rax. Nous complétons les autres paramètres avec la valeur PS_DASH (pour avoir des pointillés) et une épaisseur de 1 pixel. Pour avoir un trait continu c'est le paramètre PS_SOLID.
Quans notre crayon est crée nous le selectionnons à la place du craton par défaut par SelectObjet et nous nous en servons pour dessiner un polygone (non fermé) par la fonction Polyline à la quelle nous passons autant de structures POINT que de sommets.
Et pour terminer, nous allons dessiner des rectangles avec ou sans bord et des couleurs de fonds différentes. C'est le rôle de la sous procèdure dessin_brosse.
Dans celle çi, nous créons un crayon invisible pour avoir un rectangle sans bord  par CreatePen puis une première brosse par CreateSolidBrush que nous sélectionnons par SelectObject et nous gardons le handle de la brosse par défaut. Avec cette brosse nous dessinons un rectangle puis nous créons une deuxième brosse en remettant aussi le crayon par défaut pour avoir un tour noir.
Nous terminons en remettant la brosse d'origine et en détruisant les objets de dessin crées (une bonne pratique en prendre !!).
La programmation est donc assez simple, le plus compliqué étant de définir les coordonnées de chaque objet à tracer pour obtenir un beau dessin.
Voilà ce que donne le programme :
Fichiers joints
fenetredessin.zip Vous n'avez pas la permission de télécharger les fichiers joints.(5 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