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 :
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;
- Dans le callBack de la fenetre "playlist" :
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;
        }
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
//Structure de definition de liste chainee
typedef struct element
{
    char    titre[MAX_PATH];
    struct  element *nxtElement;
} element;
typedef element* llist;
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
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
et quand j'execute le programme j'ai un "plantage" (message windows XP qui dit que le programme doit se terminer) à la ligne :
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 :
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
Comme vous pouvez le voir la fenetre "playlist" n'as pas le STYLE WS_CHILD donc GetParent ne fonctionne pas.

Merci de votre aide.
A+