Accèder à un objet depuis Fonction membre de callback statique

Utilisateur anonyme - 12 mai 2004 à 15:42
 Utilisateur anonyme - 12 mai 2004 à 23:03
Bonjour,

J'ai une fonction membre statique de callback, qui correspond à une classe de fenêtre que j'enregistre.
Comment faire pour transmettre à cette fonction des pointeurs d'objets que j'ai créé ?
(Je n'utilise aucune variable globale)

5 réponses

Utilisateur anonyme
12 mai 2004 à 15:44
J'ai oublié le + important : Merci !
:)
0
neohp Messages postés 62 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 14 octobre 2005
12 mai 2004 à 16:36
'lut

ce callback peut ils prendre des paramètres ?? si oui, lesquels ?

neoh_p [=- coding spirit -=]
------- since 1999 ------
0
Utilisateur anonyme
12 mai 2004 à 16:57
Les paramètres classiques : voici la déclaration de la fonction :

static LRESULT CALLBACK FenetrePrincipale::ProcedurePrincipale(	HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

J'ai fait quelques recherches : dans les explications que j'ai pu trouver, il était question des fonctions SetWindowLong() ou SetProp(), mais je ne vois pas le rapport :)

Il faut dire aussi que je débute, et je ne vois pas comment procéder...

Merci !
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
12 mai 2004 à 18:36
regroupe toute les données à associer à ta fenêtre dans une structure ou une classe :
struc Data
{
};

lors de la création de ta fenêtre, passe un pointeur sur cette structure comme dernier paramètre à CreateWindow

dans ta WndProc, qd tu recoit WM_CREATE, tu récupère ce pointeur et tu l'associe au hWnd par SetWindowLong.

pour les autres messages, tu le récupère par GetWindowLong :

// affecter l'objet TMainFrame lors de la création de la fenêtre, contenu dans la
// structure CREATESTRUCT pointée par lParam
if(uMsg == WM_CREATE)
{
LPCREATESTRUCT lpcs = (LPCREATESTRUCT) lParam;
SetWindowLong(hWnd, GWL_USERDATA, (LONG)lpcs->lpCreateParams);
}

// récupération objet TMainFrame associé à la fenêtre
TMainFrame* pWnd = (TMainFrame*) GetWindowLong(hWnd, GWL_USERDATA);
if(!pWnd)
return DefWindowProc(hWnd, uMsg, wParam, lParam);

exemple tiré de ma source "Paint" qui utilise cette technique.
0

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

Posez votre question
Utilisateur anonyme
12 mai 2004 à 23:03
J'ai compris le truc, çà marche !

Un grand merci !
0
Rejoignez-nous