Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 juillet 2010
-
3 févr. 2010 à 13:05
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDerniè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.
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...
Larwin
Messages postés44Date d'inscriptiondimanche 25 novembre 2001StatutMembreDernière intervention24 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 ?
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 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