LParam dans les api... comprend rien

Résolu
Larwin Messages postés 44 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 24 juillet 2010 - 3 févr. 2010 à 13:05
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 3 févr. 2010 à 16:15
bonjour à tous et merci d'avance à la communauté de votre aide précieuse !
nouveau dans le monde c\c++, j'avoue que je galère vraiment sur des trucs qui me paraissaient enfantins dans d'autres languages...

voila mon problème :
j'utilise la fonction EnumThreadWindows pour récupérer le HWND des windows associés à un thread.

.....
HWND myWin;
EnumThreadWindows(GetCurrentThreadId(), EnumThreadWndProc, (LPARAM)(LPVOID)myWin);
.....

BOOL CALLBACK EnumThreadWndProc(HWND hwnd, LPARAM lParam){
WCHAR windowText[128] = {0};
WCHAR *findText = NULL;
GetWindowText(hwnd, windowText, 120); // récupération du nom de la fenêtre
findText = wcswcs(windowText, L"Toto"); // recherche du mot "Toto" dans le titre
if (findText == NULL){return true;} // Toto n'est pas trouvé, on continu
else {lParam = (LPARAM)hwnd; return false;} // Toto est trouvé, on stop l'exécution
}

et la c'est le drame...
je me perd completement dans les cast (LPARAM) (LPVOID) etc...
en fait je désire passer la variable myWin a la fonction EnumThreadWindows et si je trouve la fenetre Toto dans EnumThreadWndProc, je désire copier la valeur de hwnd dans myWin (le lParam)
je suppose que cela doit se faire grace a des pointeurs mais la je seche...

Merci d'avance à tous !

3 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
3 févr. 2010 à 13:47
EnumThreadWindows(...,(LPARAM)&myWin))

puis

if(fenêtre trouvée) *(HWND*)lParam=hWnd;
3
Larwin Messages postés 44 Date d'inscription dimanche 25 novembre 2001 Statut Membre Dernière intervention 24 juillet 2010
3 févr. 2010 à 15:02
c'est tout simplement génial :)
merci beaucoup juju12, parfait !

pour que je comprenne bien
*(HWND*)lParam = hWnd; signifie que
lParam est l'adresse d'un pointeur vers un HWND -> (HWND*)lParam
et l'étoile devant *(HWND*)lParam signifie la valeur du pointeur qui nous donne
la valeur du pointeur lParam vers un HWND est égal à hWnd ?
j'ai tout bon ?
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
3 févr. 2010 à 16:15
En fait lParam est le pointeur vers myWnd, mais simplement il n'est pas déclaré comme pointeur mais comme LPARAM (~entier), donc il faut faire un cast (HWND*)lParam pour que le compilateur interprète tout ça correctement.
Alors *(HWND*)lParam=hWNd signifie : placer la valeur hWnd à l'adresse mémoire correspondant à la valeur de lParam (soit l'adresse de myWnd).

C'est tout-à-fait analogue à :
int valeur;
int addresse_de_valeur=(int)&valeur;
*(int*)adresse_de_valeur=2; // = pareil que valeur=2
0
Rejoignez-nous