begin process at 2012 05 29 07:37:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

GWL_USERDATA :)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

GWL_USERDATA :)

jeudi 8 décembre 2005 à 02:52:41 | GWL_USERDATA :)

Joky

Membre Club
Bonsoir la Françe !
Voilà j'viens de rentrer du boulot ( Oui j'vous raconte ma vie et alors ! :) )
et donc je viens vous quêter une réponse :p

Voilà j'essai de stocker une chaîne de caractère dans GWL_USERDATA
avec SetWindowLong, pour associer à mon HANDLE une chaîne :)

J'ai réussi parfaitement avec un entier :)
Et avec la chaîne, ça merdouille :) J'arrive à récupere la chaîne localement
c'est à dire dans la fonction ou je lui alloue sa valeur
Mais dans une autre fonction, marche po :(

J'viens d'essayer avec une variable static car c'est sans doute lié au fait que ça change d'adresse mais voilà je sais pas trop :)
Help me ! :p

Merci tous et bonne nuit :)

if(!Meilleur("Joky")) return ERREUR;<

jeudi 8 décembre 2005 à 09:31:29 | Re : GWL_USERDATA :)

ymca2003

Il faut passer un pointeur alloué dynamiquement ou une var globale (au sens valide tout au long du prog).
Si tu passe une chaîne locale => pas bon.
jeudi 8 décembre 2005 à 11:13:54 | Re : GWL_USERDATA :)

Joky

Membre Club
Bé en faite je passe un Pointeur de structure qui contient la chaîne voulue :(

BOOL CreateMyLink(LP_drLink MyLink, HWND hParent)
{
    MyLink->hLink = CreateWindow("drLink", MyLink->szLink, WS_VISIBLE | WS_CHILD,
                                 50,30,50, 20,
                                 hParent, NULL, MyLink->hInst, NULL);

    SetWindowLong(MyLink->hLink, GWL_USERDATA, (LONG)MyLink->szLink);

    if(!MyLink->hLink)
        return FALSE;
    else
        return TRUE;
}

Et dans la procédure de message, je voudrais accéder à cette variable :(
:)
Vala merci que mm :p

if(!Meilleur("Joky")) return ERREUR;<

jeudi 8 décembre 2005 à 12:17:19 | Re : GWL_USERDATA :)

ymca2003

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).
jeudi 8 décembre 2005 à 12:22:04 | Re : GWL_USERDATA :)

Joky

Membre Club
Donc faudrait que je fasse un ptit Sleep juste avant non ?
J'vais essayer ça et j'te dis quoi :p Merci

if(!Meilleur("Joky")) return ERREUR;<

jeudi 8 décembre 2005 à 12:40:48 | Re : GWL_USERDATA :)

ymca2003

Réponse acceptée !
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.
jeudi 8 décembre 2005 à 13:44:05 | Re : GWL_USERDATA :)

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
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
jeudi 8 décembre 2005 à 19:37:40 | Re : GWL_USERDATA :)

Joky

Membre Club
Re les gens :)
Donc après multiple essai :)
J'arrive toujours pas lol :)

En gros voilà ce que ça donne :p

MyLink->hLink = CreateWindow("drLink", MyLink->szLink, WS_CHILD,
                                 50,30,50, 20,
                                 hParent, NULL, MyLink->hInst,(LPVOID)MyLink);

Dans ma fonction CreateMyLink();

Et dans ma gestion de message
case WM_CREATE:
        SetClassLong(hWnd, GCL_HBRBACKGROUND, GetClassLong(GetParent(hWnd), GCL_HBRBACKGROUND));
        Link = (LP_drLink)((LPCREATESTRUCT) lParam)->lpCreateParams;
        SetClassLong(hWnd, GWL_USERDATA, (LONG)Link->szLink);
        MessageBox(0, Link->szLink, 0, 0);
        return 0;

Donc la première message Box marche à merveille ce qui prouve que Link est bien initialisé
Mais si je met GetWindowLong(hWnd, GWL_USERDATA) bé marche pu :(
Me demande bien pourquoi lol :)
Merci quand même pour ce que vous m'avez appris lol :p

if(!Meilleur("Joky")) return ERREUR;<

jeudi 8 décembre 2005 à 20:11:31 | Re : GWL_USERDATA :)

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Faudrait peut-être utiliser SetWindowLong et pas SetClassLong ;)
vendredi 9 décembre 2005 à 16:07:15 | Re : GWL_USERDATA :)

Joky

Membre Club
Pfiuuu hé bé lol
J'ai réussi :)
Enfin vous avez réussi :)
Donc la solution était un patchwork de tout ce que vous aviez dit plus haut ! :)

J'ai passé un pointeur avec CreateWindow
Je l'ai récupéré dans WM_CREATE avec LPCREATESTRUCT
J'ai utilisé SetWindowLong
Je récupere l'objet à chaque WM_GETVALUE
Mais le problème, venait du paint, en effet, il envoie un WM_PAINT pendant la création
Donc il ne savait pas quoi afficher !
Donc j'ai fait ce qu'avait dit Vecchio ShowWindow à la fin du chargement de ma fenêtre :)

MErci bien tout le monde (k)(k)(k)(k)

if(!Meilleur("Joky")) return ERREUR;<


1 2

Cette discussion est classée dans : voil, viens, chaîne, gwl, userdata


Répondre à ce message

Sujets en rapport avec ce message

comment créer une chaîne dans une clé dans la base registre ? [ par wres ] salut,je voulais savoir comment créer une chaîne, une valeur binaire ou un DWORD dans une clé de la base de registre ?car j'arrive à créer une clé mai Vérifier un header de fichier... [ par MorZong ] Salut,Voilà j'ai créer un programme (simple, pas avec API) de cryptage tout simple et je voudrais qu'il ait sont propre genre de fichier. Alors j'ai m Pb Chaîne de caractères [ par mmuller57 ] Bonjour,J'ai créé un petit programme qui convertit les caractères d'une chaîne de caractères par leurs codes ASCII :#include #include #include int con Rechercher une chaîne de caractère dans un fichier et afficher la ligne !! [ par UncleShu ] Exemple : Mot à rechercher :-> friend----fichier où il faut rechercher le mot-----enfant childenfants childrenami friendwhen je viens vous rebassiner avec les lib [ par WuShu ] pitié !! dites moi comment inclure un .lib a un projet avec builder C ++ car ca ne suffit pas de mettre le .lib dans le repertoire lib du compilateur VESA [ par trinitacs ] Voilà je me suis bien amusé avec le VGA et j'aimerai utiliser le mode vesa. Mais seulement avec le Linear Frame Buffer car c'est beaucoup plus pratiqu openGL & MFC [ par futhark156 ] voilà, j'ouvre une fenetre OpenGL en cliquant sur un menu d'une interface MFC.j'y arrive en faisant un AfxBeginThreadle probleme, c'est que quand je f operator [] ds une classe string pr retourner un caractère [ par ngryman ] Salut à ts,voilà j'ai un petit souci ds une classe String que j'ai fait. J'ai inclu un opérateur [] qui comme un char* retourne le char à la position Affichage d'une chaîne de caractères [ par kalf2000 ] bonjour,j'ai un petit souci, je réussit à récupérer à partir d'un fichier texte une chaîne de caractère et à la mettre dans un tableau de caractère (c Version d'une Dll [ par MdcPhoenix ] Voilà, la question ets casiment dans la titre. J'ai parcouru le net de fodn en comble pour savoir comment trouver en programmation (peu importe le lan


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales