ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 8 déc. 2005 à 12:40
non ça changera rien, vu que la WndProc est appelée dans le même contexte avant de retourner du CreateProc.
le mieux c'est de passer don pointeur en dernier param de createwindow.
puis dans le Wndproc, sur le WM_CREATE tu affecte ton setWindowLong (le lParam sera alors un CREATESTRUCT avec membre lParam égal à ton pointeur.
pour les autres message tu fait un GetWindowlong
De même lors du traitement de WM_CREATE la var MyLink->hLink ne sera pas encore affectée.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 8 déc. 2005 à 13:44
J'ai deja eu le même genre de pb, et je faisais mon SetWindowLong dans WM_NCCREATE, en passant le pointeur en dernier param de CreateWindow.
Tu peux aussi ruser: si tu as besoin de MyLink->szLink dans le WM_PAINT, tu n'a qu'a créer la fenêtre comme invisible, faire le SetWindowLong, puis afficher la fenêtre:
MyLink->hLink = CreateWindow("drLink", MyLink->szLink, WS_CHILD,
50,30,50, 20,
hParent, NULL, MyLink->hInst, NULL);
SetWindowLong(MyLink->hLink, GWL_USERDATA, (LONG)MyLink->szLink);
ShowWindow(MyLink->hLink, SW_SHOW);
Car en fait, je crois que le problème est peut être qu'on recoit un WM_PAINT avant que CreateWindow ne retourne
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 8 déc. 2005 à 12:17
Normalement devrait marcher
Toutefois il est à noter que lors du traitement de WM_CREATE le GWL_USERDATA n'est pas encore affecté car la WndProc est appelée pour plusieurs messages avant que CreateWindow ne retourne (et donc que tu fait SetWindowLong).
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 9 déc. 2005 à 16:14
Du coup, pas besoin de passer par le LPCREATESTRUCT. De plus à quoi sert ton WM_GETVALUE? Si tu as besoin de la valeur uniquement dans WM_PAINT, c'est ici qu'ilf aut récupérer la valeur, car pour les WM_PAINT suivants, tu ne saura pas quand ils arriveront