Bonjour,
J'ai deux petits problèmes :
1 - Comment utiliser MAKELPARAM (avec un HWND et un pointeur sur le premier element d'une liste chainée).
Voila ce que je fais et qui ne fonctionne pas :
- Dans la procedure de la fenetre principale :
- Dans le callBack de la fenetre "playlist" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 case IDM_PLAYLIST: { HWND hDial = CreateDialogParam(hInst, "playlist" , hwnd, (DLGPROC)Dlgplaylist,MAKELPARAM(listeFile,hwnd)); ShowWindow (hDial, SW_NORMAL); } break;
Et la structure de llist (même si je pense que ca sert a rien
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 BOOL APIENTRY Dlgplaylist(HWND hdlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static llist listeFichier = NULL; static HWND hwndP = NULL; switch (uMsg) { case WM_INITDIALOG: { listeFichier = (llist)LOWORD(lParam); llist listFile = listeFichier; hwndP = (HWND)HIWORD(lParam); char *nomMusique = NULL; if (listFile == NULL) return TRUE; HWND listBox = GetDlgItem(hdlg,IDL_PLAYLIST); while (listFile != NULL) { nomMusique = strrchr (listFile->titre,'\\')+1; SendMessage(listBox,LB_ADDSTRING,0,(LPARAM)nomMusique); listFile = listFile->nxtElement; } return TRUE; }):
Voila donc quand je fais cela, ca compile bien (mais j'ai 4 warnings deux quand à la la ligne hDial = CreateDialogParam... et un par ligne de recuperation des HIWORD et LOWORD de lParam)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //Structure de definition de liste chainee typedef struct element { char titre[MAX_PATH]; struct element *nxtElement; } element; typedef element* llist;
et quand j'execute le programme j'ai un "plantage" (message windows XP qui dit que le programme doit se terminer) à la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 main.cpp: In function `LRESULT WindowProcedure(HWND__*, UINT, WPARAM, LPARAM)': main.cpp:253: warning: cast from pointer to integer of different size main.cpp:253: warning: cast from pointer to integer of different size main.cpp: In function `BOOL Dlgplaylist(HWND__*, UINT, WPARAM, LPARAM)': main.cpp:398: warning: cast to pointer from integer of different size main.cpp:401: warning: cast to pointer from integer of different size
nomMusique = strrchr (listFile->titre,'\\')+1;
2 - Comment récuperer le HWND de la fenetre depuis laquelle est utiliser la fonction createDialogParam. (ou plutot le handle passer en parametre de cette fonction : CreateDialogParam(hInst, "playlist" , hwnd, (DLGPROC)Dlgplaylist,MAKELPARAM(listeFile,hwnd))
Nota : le template de playlist :
Comme vous pouvez le voir la fenetre "playlist" n'as pas le STYLE WS_CHILD donc GetParent ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 /****Boite de Dialogue playlist*****/ playlist DIALOGEX 50, 50, 150, 60 STYLE WS_BORDER | WS_CAPTION | WS_SYSMENU CAPTION "PlayList" FONT 9, "Comic Sans MS" BEGIN //CONTROL "",-1,"STATIC",SS_ETCHEDFRAME, 2, 2, 181, 86 CONTROL "", IDL_PLAYLIST, "LISTBOX", WS_CHILD | WS_VISIBLE | LBS_STANDARD , 5, 5, 140, 50 //ICON 18, -1, 147, 4, 32, 32 //PUSHBUTTON "Effacer", IDB_OK, 15, 40, 120, 12 END
Merci de votre aide.
A+
Partager