Parcours tableau de HWND

Résolu
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 - 14 juil. 2004 à 16:23
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 15 juil. 2004 à 13:23
Bonjour,

Voila mon pb :
Je declare un tableau de HWND comme suit :

hwndCmd HWND 10 dup (?)

Ensuite, je veux créer 10 boutons et stocker leur handle ds chak element de ce tableau, voici le code :

;Creation des controles en faisant une boucle;
mov y, 0
xor edx, edx
mov esi, hwndCmd
Create:
cmp edx, 10
je Fini
mov eax, edx
add y, eax
add y, 50
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR AppName, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, 0, y, 50, 40, \
hwnd, NULL, hInst, NULL
mov esi, eax
inc edx
add esi, 4
jmp Create
Fini:

Voila, le code passe a la compilation mais pas a l'execution, si kelkun pouvait m'aider..

Merci d'avance !

++

Alhexman

12 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 juil. 2004 à 18:35
ou comments sont tronques mais on peut les avoir par copier/coller. Nix va s'en occuper des que possible.
On stocke ce qu'on veut dans EDI ou nimporte quel autre registre pendant l'execution du bloc mais TOUS registres autres que EAX,ECX et EDX doivent etre restitues en sortie comme tu les as trouves en entree.

ciao...
BruNews, Admin CS, MVP Visual C++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 juil. 2004 à 17:01
mov [esi], eax ; adresse de

vire ce 'invoke' et sers toi des registres dans une boucle pour faire une boucle optimisee.

cmp edx, 10
en haut de boucle alors que tu viens de le mettre a 0, non coherent.

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 juil. 2004 à 17:03
ah oui, oublie de preciser que l'adresse d'un tableau ou autre est 'offset mnemo'.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
14 juil. 2004 à 18:21
Ok merci, ca marche maintenant, mais est ce que c necessaire que je garde le handle de tous les controles ? Je pense pas, si ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
14 juil. 2004 à 18:24
Enfin, regarde le code, rien que pour créer les controles, jtrouve ca enorme (c de l'asm mais bon), j'ai pas encore remplacé l'invoke par un call, ca va se faire :

;Creation des controles en faisant une boucle;
mov x, 50
mov i, 0
mov esi, offset hwndNum
;mov edi, offset hwndOp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
prem:
invoke dwtoa, i, addr buf
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR buf, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, x, 50, 30, 30, \
hwnd, NULL, hInst, NULL

mov [esi], eax
add esi, 4
add x, 30
inc i
cmp i, 3
jb prem
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR Plus, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, x, 50, 30, 30, \
hwnd, NULL, hInst, NULL

;mov [edi], eax
;add edi, 4


mov x, 50
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sec:
invoke dwtoa, i, addr buf
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR buf, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, x, 80, 30, 30, \
hwnd, NULL, hInst, NULL

mov [esi], eax
add esi, 4
add x, 30
inc i
cmp i, 6
jb sec
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR Moins, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, x, 80, 30, 30, \
hwnd, NULL, hInst, NULL

;mov [edi], eax
;add edi, 4

mov x, 50
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
trois:
invoke dwtoa, i, addr buf
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR buf, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, x, 110, 30, 30, \
hwnd, NULL, hInst, NULL

mov [esi], eax
add esi, 4
add x, 30
inc i
cmp i, 9
jb trois
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR Divi, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, 140, 110, 30, 30, \
hwnd, NULL, hInst, NULL

;mov [edi], eax
;add edi, 4

mov i, 0
invoke dwtoa, i, addr buf
INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR buf , \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, 80, 140, 30, 30, \
hwnd, NULL, hInst, NULL

mov [esi], eax

INVOKE CreateWindowEx, NULL, ADDR ClassButton, ADDR Mult, \
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON, 140, 140, 30, 30, \
hwnd, NULL, hInst, NULL

;mov [edi], eax

Je voulais me servir de edi pour stocker l'adresse de mon 2eme tableau, mais ya erreur, kel registre (otre ke esi) je peu utiliser pour faire ca ?
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
14 juil. 2004 à 18:26
Oula, ya un pb la ! c pa la premiere fois que je le remark ! Les commentaires sont troqué sur la droite !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 juil. 2004 à 19:13
Et voila deja servi, Nix vient de faire la rustine anti tronquage.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
14 juil. 2004 à 20:00
Ptite kestion encore, pour conserver la valeur des registres au debut du prog, c "pushad", "pusha" ? et pour depiler "popad", "popa" ? Ou je dois "pusher" chak registre, et les depiler en sortant ?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 juil. 2004 à 20:08
non pas au debut du prog mais de chaque bloc (fonction en C).
push esi
push edi
voila par exemple.

en sortie:
pop edi
pop esi

fais bien gaffe a l'ordre des POPs, juste question de pure logique, le dernier push sera le 1er pop.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
14 juil. 2004 à 22:06
J'ai encore un pb (decidement !) : j'utilise une boite de dialogue, enfin j'aimerais car c'est plus simple que la creation d'une fenetre, des boutons...Mais le pb, c'est que je n'arrive pas a lier mon fichier resssource a mon prog asm, je pense (pas sur) kil doit exister une option au linkage, mais connais po, si tu pouvais m'eclairer BruNews... Merci

++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 juil. 2004 à 22:25
Si tu bosses avec MASM32 regarde ma source Mastermind.
Il y a boite de dialog etc... bien sur le .bat pour linker.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
15 juil. 2004 à 13:23
salut,

plutot que d'utiliser un tableau de handle, tu pourrais avoir une gestion + simple avec les identifiants car tu pourra faire une enumeration:

IDC_BASE EQU 1000h
IDC_EDIT1 EQU IDC_BASE + 0
IDC_EDIT2 EQU IDC_BASE + 1
IDC_EDIT2 EQU IDC_BASE + 2
...

mov ecx,index
invoke GetDlgItem,hMain,ADDR [IDC_BASE+ecx]
ou
SendDlgItemMessage,hMain,ADDR[IDC_BASE+ecx],WM_XX,wP,lP

@++
0
Rejoignez-nous