******************************************************************************
{{{{{{{{{{{{{{{{{{{{{{{{ DIALOGBOX EN WIN32 ASM }}}}}}}}}}}}}}}}}}}}}}}}}}}}}
******************************************************************************
Ce tut va juste vous apprendre a afficher une boite de dialogue en assembleur pour windows.
Le tout est fait pour le compilateur Tasm. Pour les resources j'utilise visual c++ mais
borland resource workshop est un produit qui donne des resources bien plus lisibles.
Question de goùt.
Pour créer votre dialogbox il va tout d'abord falloir la créer grace a un éditeur spécialisé.
Moi j'utilise visual c++ 6 mais vous pouvez le faire avec borland resource workshop ou
d'autres logiciels. Voila comment on procède avec vc++ :
Faites sous vc++ : File->New->File->resource script puis choisissez le nom
que vous lui donnez. Maintenant faites : Insert->resource voila ce que vous avez sous les yeux :
Choisissez dialog puis cliquez sur new. Voila maintenant vous avez une boite de dialogue
sous les yeux que vous n'avez qu'a modifier selon vous souhaits. Faites quelquechose
ressemblant a ceci :
Double cliquez sur les objets pour changer leurs propriétées. Pour notre exemple on mettra
le handle (ID) de la boite a 1000 et celui du bouton a 2000. Ensuite faites save as
et enregistrez le en fichier .res.
Pour faire un prog 32 bits on déclare tout d'abord toutes les apis qu'on utilise.
Passons maintenant au code source en lui même. Pour afficher une boite de dialogue
il faut le faire en quelques étapes.
.386P
Extrn MessageBoxA:PROC
Extrn DialogBoxParamA:PROC
Extrn ExitProcess:PROC
Extrn GetModuleHandleA:PROC
WM_CLOSE = 0010h
WM_COMMAND = 0111h
Bon bah là on à déclaré les APIS qu'on va utiliser et on donne la correspondance
de ce que l'on appelle WM_CLOSE et WM_COMMAND.
.Model Flat, StdCall
déclare le modèle de mémoire utilisé
Maintenant on commance le segment de datas:
.Data
hinst dd 0
message db '!!! Les cours de TiPiaX ça déchirre !!!',0
titre db 'Héhé',0
;----------------------------------------------------------------------------------------------
Début du programme
.Code
Start:
push 0
call GetModuleHandleA ; choppe l'hinstance car on en a besoin
mov [hinst], eax ; pour appeler la boite de dialogue
Appel de DialogBoxParamA pour afficher notre boite de dialogue
push 0
push offset DlgProc
push 0
push 1000
push [hinst]
call DialogBoxParamA ; affiche la boite
jmp bye
;----------------------------------------------------------------------------------------------
Fonction qui gère notre boite de dialogue
DlgProc proc hwnd:DWORD, umsg:DWORD, wparam:DWORD, lparam:DWORD
cmp [umsg], WM_CLOSE
jz bye ; saute si on ferme la boite
cmp [umsg], WM_COMMAND ;si pas WM_COMMAND
jnz fin ;on se barre
mov eax,wparam
cmp lparam,0 ;si lparam =0
jz fin ;on saute
cmp ax, 2000 ;on a cliqué le bouton ?
jnz fin ;si oui on saute pas
call boitedemessage ;et on affiche la boite de message
fin:
ret
DlgProc endp
Fonction qui affiche notre boite de message
boitedemessage proc
push 0 ;bouton ok
push offset titre ;le titre
push offset message ;le message
push 0 ;le handle
call MessageBoxA
ret
boitedemessage endp
Ici on quitte le programme
bye:
push 0
call ExitProcess
End Start
;----------------------------------------------------------------------------------------------
Le résultat en images :
Pour compiler:
tasm32 /mx /m3 /z /q dialog.asm
tlink32 -x /Tpe /aa /c dialog,dialog,,import32.lib,,resource.res
del dialog.obj
Si vous ne captez pas quelquechose n'hésiter pas a me mailer, je me ferais un plaisir de vous répondre.
ps: le prog et le source sont joints.
TiPiaX/VDS