IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Utilisation SetProp et GetProp


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Points : 232
    Points
    232
    Par défaut Utilisation SetProp et GetProp
    Bonjour,
    Je souhaite passer, à la création d'un bouton, un objet qui lui est associé.
    J'ai donc commencé par utiliser la méthode utilisant GWL_USERDATA, mais malheureusement, elle ne semble pas possible dans mes environnements WinCE : dans l'environnement Win32, cela semble fonctionner...
    J'ai donc décidé de passer par SetProp et GetProp, et je n'y arrive pas.

    Je crée un bouton de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    BOOL CreateButtonLanguage(HWND *Button, Language * Lang, int numero, HMENU HMenu, HWND GroupBox)
    {
    	RegisterLanguageButton();
    	BOOL ret = FALSE;
    	*Button = CreateWindow( LANGUAGE_BUTTON_CLASSNAME,
    		Lang->getLanguage().c_str(),
    			WS_CHILD | WS_VISIBLE | BS_MULTILINE | BS_OWNERDRAW,
    			//Au bon endroit, de la bonne taille,
    			GroupBox,
    			HMenu,
    			hInst,
    			NULL
    			);
    		SetWindowLong(GroupBox, 0, (LONG)*Button);
    	if(!*Button)
    	{
    		ret = FALSE;
    	}
    	else
    	{
    		if(!SetProp(*Button, L"Language", Lang))
    		{
    			MessageBox(NULL, L"Error", L"Plop", MB_OK);
    		}
    	}
    	return ret;
    }
    Language est une classe, ne possédant que deux variables internes, qui sont une wstring et une liste initialisée à vide (contenant in fine des clés et des phrases associées).
    Ensuite, lors du click de la souris sur le bouton, je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    LRESULT CALLBACK Language::myLanguageButtonProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch(msg)
    	{
    ...
    		case WM_LBUTTONDOWN:
    		{		
    		Language * Langu = new Language();
    		HANDLE Plop = GetProp(hwnd, L"Language");
    		if (Plop != NULL)
    		{
    			Langu = (Language*)Plop;
    		}
    	}
    	return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    Et je récupère de la m....de.
    Il me semble clair que je récupère "ce que je fais", mais je ne vois pas la boulette.
    J'ai également essayé de passer la structure "Language" en tant que paramètre du CreateWindow, puis, dans le message "WM_NCREATE" ou "WM_CREATE", ajouté le SetProp : cela ne fonctionne pas non plus...

    Merci d'avance pour vos aides précieuses.
    Les gens croient qu'il est agréable d'être un super-génie, mais s'ils savaient à quel point il est difficile d'être entouré de super-crétins !
    Calvin dans Calvin et Hobbes (Bill Watterson)

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    La doc de SetProp()/GetProp() est ambigüe, j'ai du mal à voir si elle accepte n'importe quel pointeur vers n'importe quoi.

    Que se passe-t-il quand tu tentes d'utiliser GWL_USERDATA ou GWLP_USERDATA?

    PS: Ton second code donne une fuite de mémoire (Lang), et tu devrais utiliser _T() ou TEXT() plutôt que L.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo