Ajout de controles et menus à une fenêtre

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

Ajout de controles et menus à une fenêtre

Message par Admin le Ven 16 Déc - 17:36

Nous allons compléter le programme précédent de fenêtre simple avec quelques contrôles. Comme les programmes deviennent plus important, le code ne sera plus inséré dans le corps du sujet, mais sera mis en pièce jointe.
A nos libellés de texte précédents, nous ajoutons les libellés de texte des menus et des boutons. vous remarquerez que le texte Fichier est précédé du symbole &, cela permet d'activer le menu en tapant la touche alt et la lettre F et c'est windows qui va gérer cette possibilité.
Le code de la procèdure principale reste inchangé et dans la procèdure qui gère les événements de la fenêtre nous ajoutons la gestion des messages WM_MENUSELECT et WM_COMMAND. Le premier message permet d'afficher dans la barre d'état un petit message lorsque l'on sélectionne un menu ou un sous menu. Le deuxième va gérer les appuis sur les boutons.
Dans la partie création,nous allons appeler des sous procédures qui vont ajouter tous les éléments nécessaires.
Commençons par les menus : nous créons une barre de menus par la fonction CreateMenu et nous gardons son handle puis le menu fichier avec la même fonction que nous attachons à la barre des menus par la fonction AppendMenuA puis nous attachons le sous menu Quitter au menu Fichier par la même fonction. Enfin nous rattachons la barre des menus à notre fenêtre par SetMenu. Ici il y a une astuce pour récupérer le handle de la fenêtre que nous n'avons pas passée en paramètre (mais nous aurions pu le faire, dans rcx par exemple). Comme nous avons mis l'instruction enter en début de procédure l'adresse pointée par rbp contient l'adresse du rbp de la procèdure appelante, ce qui nous permet de récupérer le paramètre stockée au début de WndProc comme ceci :
Code:

mov rax,[rbp]   ; on recupere le rbp precedent
mov rcx,qword[rax+16]     ; handle de la fenetre principale
 
Ensuite nous ajoutons un bouton à notre fenêtre. Et pour windows, un bouton c'est une fenêtre que nous créons en utilisant la fonction CreateWindowExA et ces 12 paramètres (ce qui permet de le créer comme nous voulons). Mais son type sera prédéfini par la chaine de caractères szTypeBouton qui contient "button". Son identification sera la constante BN_CLICKED et son libellé "ENTRER". Et contrairement aux libellés des boites de dialogue, il n'est pas nécessaire de le convertir en caractères UNICODE (ce ne doit pas être le même programmeur qui a crée les 2 fonctions !!!).
Maintenant nous ajoutons une zone de saisie et c'est aussi une fenêtre que nous créons toujours par CreateWindowExA mais avec le type "edit".
Puis nous ajoutons une zone de résultats sous la forme d'une listbox et c'est ...  bien sûr une fenêtre avec le type ListBox.
Et nous terminons par l'ajout de la barre d'état en bas de la fenêtre par la fonction CreateStatusWindow.
Dans la partie paint, nous nous contentons d’éditer un texte simple. Nous aurions pu aussi l'ajouter dans la partie création en créant une fenêtre avec le type "Static".
Dans la partie commande, nous utilisons le contenu du paramètre wParam pour savoir si l'utilisateur a cliqué sur un bouton ou sur un menu.
Si c'est le bouton, nous affichons un message dans la barre d'état par la fonction SendMessageA et nous récupérons le contenu de la zone de saisie par les fonctions GetWindowTextLengthA et GetWindowTextA. Nous effectuons un passage en majuscule et nous envoyons le résultat dans la zone prévue toujours par la fonction SendMessageA.
Il reste un petit détail à régler : l'affichage de messages dans la barre d'état en fonction des actions de l'utilisateur, c'est le rôle de la procèdure affStatusBar. Là aussi, nous exploitons le contenu de wParam pour identifier ces actions et afficher le bon libellé.
Attention le format de ce fichier est docx car je n'ai pas pu joindre un fichier en .txt. Il faudra peut être faire des conversions avant de l'utiliser avec le format .asm pour le compiler.
Fichiers joints
fenetrecontrole1.docx Vous n'avez pas la permission de télécharger les fichiers joints.(12 Ko) Téléchargé 1 fois
avatar
Admin
Admin

Messages : 38
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