fonctions Callback [Visual C++] - Programmation
Marsh Posté le 03-07-2001 à 18:16:00
Le moins que l'on puisse dire c'est que c'est pas clair...
HWND comme sa je dirais que c'est un Handle de fenetre mais bon peu importe...
tu appelle la fonction machin et tu lui passe la fonction sans mettre d'argument avec un & devant... (optionnel il me semble mais je ne suis pas sure...)
maintenent verifie que HWND est bien un pointeur sur un CallBack j'en doute un peu quand meme...
Marsh Posté le 03-07-2001 à 18:21:58
désolé si c pas clair, ca l'est pas pr moi deja
si g tt suivi a ce qu'on a tenté de m'expliquer, le HWND c equivalent a un int (ca serait comme un identifiant en gros)
le probleme c justement que je sais pas comment recuperer la callback a partir de cet identifiant
on m'a parlé de prog windows et comme quoi ct courant de faire comme ca ...
j'ai essayé de regarder a callback ds la msdn ms bon ds le genre limpide on fait mieux...
bref c la memerde
help
Marsh Posté le 03-07-2001 à 19:38:15
__Lolo__ a écrit a écrit : le probleme c justement que je sais pas comment recuperer la callback a partir de cet identifiant on m'a parlé de prog windows et comme quoi ct courant de faire comme ca ... |
toujours pas clair si tu expliquais (en détail ?) ce que tu veux faire.
Marsh Posté le 03-07-2001 à 20:33:12
la galere les fonctions callback .. m'en suis servi qu'une seule fois
tu trouveras des exemples sur codeguru.com et codeproject.com
Marsh Posté le 03-07-2001 à 20:35:08
dis lolo, tu serais pas en train de vouloir utiliser les hook sur les evenements genre keyb ou mouse...?
Marsh Posté le 03-07-2001 à 20:55:08
la viper a écrit a écrit : la galere les fonctions callback .. m'en suis servi qu'une seule fois tu trouveras des exemples sur codeguru.com et codeproject.com |
qqn qui me comprend !!!!! merci je vais voir ca de suite
[citation]dis lolo, tu serais pas en train de vouloir utiliser les hook sur les evenements genre keyb ou mouse...? [/citation]
wpk
heu... pas du tout
en fait g une dll en C++ qui permet d'écrire des clients pr une certaine appli
moi je fais une dll en C++ (avec une interface C pour pouvoir etre appeler en Delphi) qui l'encapsule
ds ma dll je m'occupe de la récupération de message que les composants delphi devront afficher par exemple. pour ca je souhaitais faire passer a ma fonction de récupération un pointeur sur la fonction d'affichage mais on m'impose un argument HWND pr la fonction de récupération
voila j'ai essayé de faire clair, si vous avez d'autres idées, je suis preneur
Marsh Posté le 04-07-2001 à 09:45:27
si je comprends bien tu veux faire passer un pointeur sur fonction à une fonction qui prend comme param un HWND ? t'es sûr de t'y prendre correctement ? c'est 100% ton code ou tu es obligé d'utiliser une api ?
la syntaxe pour pointeur sur fonction, qq1 l'a donné y'a pas longtemps dans un thread. tu peux t'en servir pour la caster en hwnd (sic), ou si tu as besoin du hwnd, caster une structure qui contient le hwnd et le pointeur (resic).
à part ça je vois pas ... faudrait que tu balances qq lignes d'exemple.
Marsh Posté le 04-07-2001 à 09:53:42
bah en fait moi je voulais utiliser le pointeur sur fonction
mais je dois utiliser une ancienne API qui utilisait un HWND (c définit où d'ailleurs le HWND ?)
Marsh Posté le 04-07-2001 à 16:01:16
La solution :
LONG SetWindowLong(
HWND hWnd, // handle of window
int nIndex, // offset of value to set
LONG dwNewLong // new value
);
avec nIndex = GWL_WNDPROC
et dwNewLong = pointeur sur la procedure CallBack
HWND est un type de base de windows, du moment qu'on met windows.h dans un prog il est défini. Sous les os 32bits c'est un entier 32bit mais ça peut varier suivant les platformes, par example sous windows 3.1 c'est un entier sur 16bits. C'est pour cela que l'on definie un type spécial, pour aider à la portabilité
Marsh Posté le 04-07-2001 à 16:07:00
seblamb a écrit a écrit : La solution : LONG SetWindowLong( HWND hWnd, // handle of window int nIndex, // offset of value to set LONG dwNewLong // new value ); avec nIndex = GWL_WNDPROC et dwNewLong = pointeur sur la procedure CallBack HWND est un type de base de windows, du moment qu'on met windows.h dans un prog il est défini. Sous les os 32bits c'est un entier 32bit mais ça peut varier suivant les platformes, par example sous windows 3.1 c'est un entier sur 16bits. C'est pour cela que l'on definie un type spécial, pour aider à la portabilité |
Aider a la portabilite et ajouter de la semantique...
un HWND on sait que c'est un fenetre... alors que long... on n sait pas...
C'est pour cela que utiliser un HWND pour passer un ptr de fct ca me choque...
Marsh Posté le 04-07-2001 à 16:24:09
A mon avis la fonction remplace CallBack de la fenetre dont tu passes le handle ( HWND) par son propre CallBack grace à la fonction de SetWindowLong.
Elle doit surement sauvegarder ( avec GetWindowsLong() ) l'ancien CallBack de la fenetre et l'appeler après avoir fait ses propres traitements.
C'est quelque chose de courant, ça s'appelle dans l'aide de windows "Subclassing a window".
Marsh Posté le 05-07-2001 à 09:20:03
je crois que j'ai trouvé !!
les composants delphi ont tous une methode wmmessage qui intercepte WM_UPDATE
donc l'appel a une callback est remplacée par l'envoi d'un message wm_update au handle du composant
question : c koi comme type de messages (exception ?, autre ?), ca s'envoit comment en visual c++ ?
Marsh Posté le 03-07-2001 à 17:48:20
dans la série lolo et sa dll ...
j'ai :
- une fonction callback, définie ds l'appli qui utilise la dll
- une fonction machin qui prend un handle HWND censé représenter la callback (?)
en gros ca se raccorde comment les 2 morceaux ? (explications avec du code, ca serait trop fort !)
merci