Subclassing de bouton ne fonctionne pas

Subclassing de bouton ne fonctionne pas - ASM - Programmation

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 :

Citation :


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)
Reply

Marsh Posté le 08-02-2004 à 21:32:25   

Reply

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...


Message édité par HelloWorld le 08-02-2004 à 21:36:37

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-02-2004 à 21:37:48    

Go c# :o
 
ton invoke CallWindowProc,BtnProc,hBtn,uMsg,wParam,lParam  
est dans le if, c'est mal :o (paske dans les ot cas tu renvoies n'importe quoi)


Message édité par chrisbk le 08-02-2004 à 21:38:50
Reply

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 ?
Essai de faire un beep à la place...



invoke  Beep,22050,10000


Pareil :(
 

HelloWorld a écrit :

edit : tsss, en assembleur...


c'est très bien l'assembleur dans ce cas précis :o
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 [:sinclaire]


Message édité par Harkonnen le 08-02-2004 à 21:42:21

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2004 à 21:42:33    

bingo bien vu


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-02-2004 à 21:45:58    

chrisbk a écrit :


ton invoke CallWindowProc,BtnProc,hBtn,uMsg,wParam,lParam  
est dans le if, c'est mal :o (paske dans les ot cas tu renvoies n'importe quoi)


quel con, mais quel con :pfff:
évidemment que c'est ça ! ça fait 2 heures que je suis dessus en plus !
harko, élu boolay du jour !!
 
merci :jap:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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 :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

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é...:D
 
Pour les perfs, je suis sceptique. Je suis arrivé à pondre des exe + petits avec VC++ qu'avec masm (1Ko vs 4Ko).


Message édité par HelloWorld le 08-02-2004 à 21:55:34

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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é...:D
 
Pour les perfs, je suis sceptique. Je suis arrivé à pondre des exe + petits avec VC++ qu'avec masm (1Ko vs 4Ko).

1 Ko avec VC++ [:mlc]
De toutes façons Harko va te dire qu'il fallait striper ton exe de masm pour tomber à 1 Ko :D


Message édité par *syl* le 08-02-2004 à 21:59:46
Reply

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.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 08-02-2004 à 21:59:18   

Reply

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é...:D


Si ça te reprend, MP moi, on s'y collera à deux :D
 

HelloWorld a écrit :


Pour les perfs, je suis sceptique. Je suis arrivé à pondre des exe + petits avec VC++ qu'avec masm (1Ko vs 4Ko).


1 Ko avec VC++ ? [:wam]
bah en fait, si je l'ai fait en asm, c'est surtout parce que j'aime  ça :D
et puis, 20 octets pour la routine de conversion euro pure, ça le fait [:ddr555]
 

Code :
  1. fld  FPNumber
  2. fld  Taux
  3. fdiv
  4. fst  FPNumber


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2004 à 22:07:09    

un fld inutile
fld FPNumber
fdiv Taux
fst FPNumber
 
tu gagnes 2octets

Reply

Marsh Posté le 08-02-2004 à 22:09:16    

chrisbk a écrit :

un fld inutile
fld FPNumber
fdiv Taux
fst FPNumber
 
tu gagnes 2octets

Dis tout de suite qu'il est mauvais :whistle:  
 
 
 
 
[:neowen]

Reply

Marsh Posté le 08-02-2004 à 22:09:50    

chrisbk a écrit :

un fld inutile
fld FPNumber
fdiv Taux
fst FPNumber
 
tu gagnes 2octets


très juste :jap:
'vais faire un petit coup de RDTSC histoire de voir le nombre de cycles gagnés [:meganne]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2004 à 22:10:12    

*Syl* a écrit :

Dis tout de suite qu'il est mauvais :whistle:  
 
 
 
 
[:neowen]


 
il y a ceux qui ont eux le plaisir d'encoder les opcodes a la main, et les autres :o

Reply

Marsh Posté le 08-02-2004 à 22:10:36    

*Syl* a écrit :

Dis tout de suite qu'il est mauvais :whistle:  
 
 
 
 
[:neowen]


le principe des registres empilés de la FPU m'a toujours gonflé en fait :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2004 à 22:11:13    

Harkonnen a écrit :


très juste :jap:
'vais faire un petit coup de RDTSC histoire de voir le nombre de cycles gagnés [:meganne]


 
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) :o

Reply

Marsh Posté le 08-02-2004 à 22:12:00    

Harkonnen a écrit :


le principe des registres empilés de la FPU m'a toujours gonflé en fait :D


 
pourtant a coté des instructions entieres, la FPU c'est du bonheur

Reply

Marsh Posté le 08-02-2004 à 22:15:53    

chrisbk 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) :o


ça je l'avais fait par contre, je sais pas par quel miracle le fstp  est devenu fst [:meganne]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2004 à 22:16:55    

Harkonnen a écrit :


ça je l'avais fait par contre, je sais pas par quel miracle le fstp  est devenu fst [:meganne]


 
[:buvons] ?

Reply

Marsh Posté le 08-02-2004 à 22:19:53    

Harkonnen a écrit :


ça je l'avais fait par contre, je sais pas par quel miracle le fstp  est devenu fst [:meganne]

Faut pas chercher, c'est encore un coup des conspirateurs :o

Reply

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 :)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2004 à 22:25:22    

tiens, un petit screen de RadASM pour ceux que ça intéresse
 
http://harko.free.fr/radasm.PNG


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed