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 :
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).
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; }
Ensuite, lors du click de la souris sur le bouton, je fais ceci :
Et je récupère de la m....de.
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); }
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.
Partager