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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| //Dialogue.cpp
#include <windows.h>
#include "resource.h"
#include "Dialogue.h"
//Les données persistantes de la boîte de dialogue:
//Pour l'instant, on les met en variable globale,
//car si je fais plus compliqué (mais plus propre) ta tête va exploser.
static struct MemoireDlg g_memDlg;
BOOL MustInterrupt(void)
{
return g_memDlg.mustInterrupt;
}
INT_PTR CALLBACK DlgprocessProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
//Modele SESE : Single Entry, Single Exit.
INT_PTR bRet = TRUE;
switch(uMsg)
{
case WM_INITDIALOG:
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_Start:
//Refuse de refaire l'opération si elle est déjà en cours
if(g_memDlg.doingSomethingLong)
break;
g_memDlg.doingSomethingLong = TRUE;
HWND hwndList = GetDlgItem(hDlg, IDC_LIST1);
Traitement_Donnees(valeur1, valeur2, valeur3, hwndList);
g_memDlg.doingSomethingLong = FALSE;
if(g_memDlg.mustQuit)
SendMessage(hDlg, WM_COMMAND, IDCANCEL, 0);
if( ! g_memDlg.mustInterrupt )
{
//Voir avertissement sur EndDialog() plus bas
EndDialog(hDlg, 0);
//NOTE: Aucun cast n'est nécessaire quand le prototype est le bon.
DialogBox(hinst, TEXT("DIALOG6"), hwnd, DlgDataProc);
}
break;
case IDC_Cancelprocess:
g_memDlg.mustInterrupt = TRUE;
break;
case IDCANCEL:
//Ne pas quitter si op en cours
if(g_memDlg.doingSomethingLong)
{
g_memDlg.mustInterrupt = TRUE;
g_memDlg.mustQuit = TRUE;
break;
}
//ATTENTION: J'ai un doute sur la sécurité du EndDialog()+DialogBox().
//SURTOUT avec le paramètre hwnd.
//Peut-être devrais-tu utiliser la valeur de retour de DialogBox()
//(second paramètre de EndDialog())
//Pour dire à la fenêtre mère d'ouvrir la bonne boîte de dialogue, à la place...
EndDialog(hDlg, 0);
//NOTE: Aucun cast n'est nécessaire quand le prototype est le bon.
DialogBox(hInst, TEXT("DIALOG1"), hwnd, DlgProc);
break;
default:
bRet = FALSE;
break;
}
break;
default:
bRet = FALSE;
break;
}
return bRet;
} |