Subclassing de bouton ne fonctionne pas - ASM - Programmation
Marsh Posté le 08-02-2004 à 21:36:05
Le fait qu'il y ait un bouton dans la message box n'y est pas pour quelque chose ?
Essai de faire un beep à la place...
edit : tsss, en assembleur...
Marsh Posté le 08-02-2004 à 21:37:48
Go c#
ton invoke CallWindowProc,BtnProc,hBtn,uMsg,wParam,lParam
est dans le if, c'est mal (paske dans les ot cas tu renvoies n'importe quoi)
Marsh Posté le 08-02-2004 à 21:42:05
HelloWorld a écrit : Le fait qu'il y ait un bouton dans la message box n'y est pas pour quelque chose ? |
|
Pareil
HelloWorld a écrit : edit : tsss, en assembleur... |
c'est très bien l'assembleur dans ce cas précis
c'est un convertisseur euro des plus basiques que je fais pour un copain qui se traine avec un 486 et un DD de 250 Mo, ça prendra moins de place et de ressources
Marsh Posté le 08-02-2004 à 21:42:33
ReplyMarsh Posté le 08-02-2004 à 21:45:58
chrisbk a écrit : |
quel con, mais quel con
évidemment que c'est ça ! ça fait 2 heures que je suis dessus en plus !
harko, élu boolay du jour !!
merci
Marsh Posté le 08-02-2004 à 21:52:58
HelloWorld >> ton idée de gestionnaire de copier/coller assisté, c'est sérieux ? parce que ma boulette provient également d'un copier/coller des plus foireux
Marsh Posté le 08-02-2004 à 21:54:26
Moaui j'y ai réfléchi,mais devant l'empleur de la tâche j'ai renoncé...
Pour les perfs, je suis sceptique. Je suis arrivé à pondre des exe + petits avec VC++ qu'avec masm (1Ko vs 4Ko).
Marsh Posté le 08-02-2004 à 21:57:21
HelloWorld a écrit : Moaui j'y ai réfléchi,mais devant l'empleur de la tâche j'ai renoncé... |
1 Ko avec VC++
De toutes façons Harko va te dire qu'il fallait striper ton exe de masm pour tomber à 1 Ko
Marsh Posté le 08-02-2004 à 21:59:18
En fait c'est pas le compilo qui joue mais le linker. C'est lui ki fait tout.
Marsh Posté le 08-02-2004 à 22:03:54
HelloWorld a écrit : Moaui j'y ai réfléchi,mais devant l'empleur de la tâche j'ai renoncé... |
Si ça te reprend, MP moi, on s'y collera à deux
HelloWorld a écrit : |
1 Ko avec VC++ ?
bah en fait, si je l'ai fait en asm, c'est surtout parce que j'aime ça
et puis, 20 octets pour la routine de conversion euro pure, ça le fait
Code :
|
Marsh Posté le 08-02-2004 à 22:07:09
un fld inutile
fld FPNumber
fdiv Taux
fst FPNumber
tu gagnes 2octets
Marsh Posté le 08-02-2004 à 22:09:16
chrisbk a écrit : un fld inutile |
Dis tout de suite qu'il est mauvais
Marsh Posté le 08-02-2004 à 22:09:50
chrisbk a écrit : un fld inutile |
très juste
'vais faire un petit coup de RDTSC histoire de voir le nombre de cycles gagnés
Marsh Posté le 08-02-2004 à 22:10:12
*Syl* a écrit : Dis tout de suite qu'il est mauvais |
il y a ceux qui ont eux le plaisir d'encoder les opcodes a la main, et les autres
Marsh Posté le 08-02-2004 à 22:10:36
*Syl* a écrit : Dis tout de suite qu'il est mauvais |
le principe des registres empilés de la FPU m'a toujours gonflé en fait
Marsh Posté le 08-02-2004 à 22:11:13
Harkonnen a écrit : |
pis fstp serait pe plus bienvenue que fst, tu es censé laisser la pile de la FPU vide en fin de fonction (sauf si tu retournes un float)
Marsh Posté le 08-02-2004 à 22:12:00
Harkonnen a écrit : |
pourtant a coté des instructions entieres, la FPU c'est du bonheur
Marsh Posté le 08-02-2004 à 22:15:53
chrisbk a écrit : |
ça je l'avais fait par contre, je sais pas par quel miracle le fstp est devenu fst
Marsh Posté le 08-02-2004 à 22:16:55
Harkonnen a écrit : |
?
Marsh Posté le 08-02-2004 à 22:19:53
Harkonnen a écrit : |
Faut pas chercher, c'est encore un coup des conspirateurs
Marsh Posté le 08-02-2004 à 22:21:28
possible, ou alors une tabulation qui a sauté
t'as essayé RadASM ? si c'est pas le cas, je te le conseille fortement
Marsh Posté le 08-02-2004 à 22:25:22
tiens, un petit screen de RadASM pour ceux que ça intéresse
Marsh Posté le 08-02-2004 à 21:32:25
Bonjour,
Je suis en train de réaliser un petit programme dans lequel j'ai besoin de subclasser un controle BUTTON (ie remplacer la pompe à messages du bouton gérée par Windows par ma propre pompe à messages), afin d'intercepter le moment où la souris passera sur ce bouton, pour le changer de couleur.
Voici mon code :
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,ADDR DlgName,NULL,ADDR DlgProc,NULL
invoke ExitProcess,eax
DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,uMsg
.IF eax==WM_INITDIALOG
invoke GetDlgItem,hWnd,IDC_BTCONV
mov hBouton,eax
invoke GetDlgItem,hWnd,IDC_TXTFRF
invoke SetFocus,eax
invoke SetWindowLong,hBouton,GWL_WNDPROC,ADDR BtnWndProc
mov BtnProc,eax
[...]
BtnWndProc proc hBtn:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg==WM_MOUSEMOVE
invoke MessageBox,NULL,ADDR msg,ADDR titre,MB_OK
invoke CallWindowProc,BtnProc,hBtn,uMsg,wParam,lParam
.ENDIF
ret
BtnWndProc endp
Le passage en gras est le plus important : dés que ma Dialog est créée (en interceptant donc le WM_INITDIALOG), je récupère le hWnd du bouton que je stocke à l'adresse hBouton, puis j'utilise la fonction Win32 SetWindowLong() pour substituer à la procédure de messages du bouton standard ma propre procédure (BtnWndProc), dans laquelle je demande à afficher une MessageBox en cas de survol de la souris (WM_MOUSEMOVE).
Problème : au lancement du programme, le bouton ne s'affiche pas, et mon programme semble complètement figé.
Quelqu'un sait il d'où ça peut venir ?
Message édité par Harkonnen le 08-02-2004 à 21:36:37
---------------
J'ai un string dans l'array (Paris Hilton)