Bonjour,
Dans mon appli je fais appel à une boite de dialogue dans laquelle je suis amené à rechercher des élément via une seconde boite de dialogue.
Pour passer l'information j'utilise "SetWindowLong ()" mais au retour une fois récupéré par "GetWindowLong()", l'application plante.
http://www.photosreflex.net/temp/erreur_visualc.jpg
Pourtant j'affiche bien le bon resultat par MessageBox() ...
Il a sûrement quelque chose ...
Comment passer une structure d'un dialogue à un autre ...
Si quelqu'un a une idée
Merci d'avance
DialogBox appelante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
case BN_CLICKED:
            DialogBox(hInst, MAKEINTRESOURCE(Libpredef), hDlg, LibpredefDlgProc);
            lbpdef = (LIBPREDEF *)GetWindowLong(hDlg, DWL_USER);
			strcpy(szBuffer, lbpdef->LibPredef);
			MessageBox (hDlg, szBuffer, szAppName, MB_OK | MB_ICONEXCLAMATION);
            SetDlgItemText (hDlg, IDC_OBJET, szBuffer, strlen(szBuffer));
            break;
DialogBox appelée :
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
29
30
31
32
BOOL CALLBACK LibpredefDlgProc (HWND hDlg, UINT message, UINT wParam, LONG lParam)
{
HGLOBAL hglb;
LIBPREDEF *lbpdef;

     switch (message)
	 {
       case WM_INITDIALOG:
            if (hglb = GlobalAlloc(GPTR,sizeof(LIBPREDEF))) {
		       if (lbpdef = (LIBPREDEF *)GlobalLock(hglb)) {
                 SetWindowLong(GetParent(hDlg),DWL_USER,(LONG)lbpdef);
				 lbpdef->hglb = hglb;
			     strcpy(lbpdef->LibPredef, "Test transition de données");
                 return(0L);
			   }
			   GlobalFree(hglb);
			 }
		    return TRUE;

       case WM_COMMAND:
           switch (wParam)
		   {
             case IDOK :
             case IDCANCEL :
				   
                  EndDialog (hDlg, 0) ;
                  return TRUE ;
		   }
           break ;
	 }
     return FALSE ;
}