Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3272 connectés 

  FORUM HardWare.fr
  Programmation
  ASM

  Subclassing de bouton ne fonctionne pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Subclassing de bouton ne fonctionne pas

n°635433
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 21:32:25  profilanswer
 

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)
mood
Publicité
Posté le 08-02-2004 à 21:32:25  profilanswer
 

n°635436
HelloWorld
Salut tout le monde!
Posté le 08-02-2004 à 21:36:05  profilanswer
 

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
n°635437
chrisbk
-
Posté le 08-02-2004 à 21:37:48  profilanswer
 

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
n°635443
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 21:42:05  profilanswer
 

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)
n°635444
HelloWorld
Salut tout le monde!
Posté le 08-02-2004 à 21:42:33  profilanswer
 

bingo bien vu


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°635447
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 21:45:58  profilanswer
 

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)
n°635453
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 21:52:58  profilanswer
 

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)
n°635454
HelloWorld
Salut tout le monde!
Posté le 08-02-2004 à 21:54:26  profilanswer
 

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
n°635456
*syl*
--> []
Posté le 08-02-2004 à 21:57:21  profilanswer
 

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
n°635459
HelloWorld
Salut tout le monde!
Posté le 08-02-2004 à 21:59:18  profilanswer
 

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
mood
Publicité
Posté le 08-02-2004 à 21:59:18  profilanswer
 

n°635466
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 22:03:54  profilanswer
 

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)
n°635472
chrisbk
-
Posté le 08-02-2004 à 22:07:09  profilanswer
 

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

n°635475
*syl*
--> []
Posté le 08-02-2004 à 22:09:16  profilanswer
 

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]

n°635476
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 22:09:50  profilanswer
 

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)
n°635477
chrisbk
-
Posté le 08-02-2004 à 22:10:12  profilanswer
 

*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

n°635478
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 22:10:36  profilanswer
 

*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)
n°635479
chrisbk
-
Posté le 08-02-2004 à 22:11:13  profilanswer
 

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

n°635480
chrisbk
-
Posté le 08-02-2004 à 22:12:00  profilanswer
 

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

n°635486
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 22:15:53  profilanswer
 

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)
n°635487
chrisbk
-
Posté le 08-02-2004 à 22:16:55  profilanswer
 

Harkonnen a écrit :


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


 
[:buvons] ?

n°635489
*syl*
--> []
Posté le 08-02-2004 à 22:19:53  profilanswer
 

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

n°635490
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 22:21:28  profilanswer
 


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)
n°635492
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 08-02-2004 à 22:25:22  profilanswer
 

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)
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASM

  Subclassing de bouton ne fonctionne pas

 

Sujets relatifs
[VB Excel] bouton qui descend en meme temps que l'ascenseur ?Envoi de formulaire qui ne fonctionne a moitié ...
comment mettre l'icone DOIGT de la souris sur un bouton ???mettre un texte au lieu d'un bouton
Requete SQL qui ne fonctionne pasInclude qui ne fonctionne pas ?
Insérer une fonction de validation sur un bouton image d'un formulaireInclude ne fonctionne pas, Problème PHP je pense « HELP
[Java] Tester le bouton annuler de showInputDialog ??MyOleDb - SELECT MAX(id) FROM table ne fonctionne pas...
Plus de sujets relatifs à : Subclassing de bouton ne fonctionne pas


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)