Plusieurs fenêtre win32

Signaler
Messages postés
100
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
3 août 2004
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
bonjour,

Voilà j'ai un programme qui ouvre sur un menu . Ce menu permet d'ouvrir plusieurs fenêtres mais lorque une est ouverte je ne peux pas cliquer sur mon menu.
Ce que je voudrais faire c'est pouvoir ouvrir plusieurs fenêtre à partir de mon menu.
Comment est ce que je peux faire ça?

merci d'avance
Maeva

4 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Maeva prendrait les membres de CS pour des extralucides ???
Quelques precisions stp si tu veux que qlqun t'apporte un debut de reponse.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
38
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
20 juin 2010

lol je pense qu'elle parle d'un exemple que tu as dans mis Brunews, Petzold, avec le MDIDemo...

ArNo
Messages postés
100
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
3 août 2004

voilà la déclaration de mes fonctions , je mets pas tout le code parce que c'est long !
Donc ma fenêtre menu me permet d'ouvrir la fenêtre A PROPOS DE , FENETRE DROITS ,FENETRE OUVRIR PDF . Ca j'y arrive bien mais une par une et ma fenêtre menu devient inactive (elle est toujours visible). Je voudrais pouvoir toute les ouvrir! (Mais pas deux fois la même!)

//+++++++++++++++++++++++++++ FENETRE A PROPOS DE
//Procédure de gestion des évènements de la fenêtre ABOUT
BOOL CALLBACK AboutDlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
//+++++++++++++++++++++++++++++++++++++++++++++

//++++++++++++++++++++++++++++++ FENETRE DROITS
//Procédure de gestion des évènements de la fenêtre DROITS
BOOL CALLBACK DroitsDlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);

//Initialisation des CheckBox suivant les droits de l'utilisateur
void CheckBox(HWND hdlg);
//+++++++++++++++++++++++++++++++++++++++++++++

//++++++++++++++++++++++++++++ FENETRE OUVRIR PDF

//Procédure de gestion des évènements de la fenêtre Ouvrirpdf
BOOL CALLBACK PdfDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam);

//Initialise la boite de dialogue Pdf
void InitDialogPdf(HWND hdlg);

//Fonction qui implémente et affiche le browser
void OnBrowse();

//Fonction qui enlève la chaîne de caractère .pdf à la fin de szfile
void EnlevePointPdf();
//+++++++++++++++++++++++++++++++++++++++++++++

//+++++++++++++++++++++++++++++++ FENETRE MENU
//Procédure de gestion des évènements de la fenêtre Menu
BOOL CALLBACK MenuDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam);

//Initialise la boite de dialogue Menu
void InitDialogMenu(HWND hdlg);

//+++++++++++++++++++++++++++++++++++++++++++++

//+++++++++++++++++++++++++++ FENETRE MOT DE PASSE
//Procédure de gestion des évènements de la fenêtre Motdepasse
BOOL CALLBACK MotdepasseDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam);

//Initialise la fenêtre Motdepasse
void InitDialogMotdepasse(HWND hdlg);

//Vérifie le mot de passe rentré par l'utilisateur
int VerifMotdepasse(char Login[10],char Password[16],HWND hdlg);
//+++++++++++++++++++++++++++++++++++++++++++++

//++++++++++++++++++++++++++++ FENETRE BIENVENUE

//Procédure de gestion des évènements de la fenêtre Bienvenue
BOOL CALLBACK BienvenueDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam);
//+++++++++++++++++++++++++++++++++++++++++++++

//POINT D'ENTREE DU PROG (EQUIVALENT DU MAIN)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z);

BOOL CALLBACK AboutDlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg){

case WM_CTLCOLORDLG:
return (LONG)(LONG_PTR)hbrush;

case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam,TRANSPARENT);
return (LONG)(LONG_PTR)hbrush;

case WM_COMMAND:

switch( LOWORD(wParam) ){

case IDOK:

EndDialog(hwndDlg, 0);
break;
}

return TRUE;

}

return FALSE;
}
BOOL CALLBACK DroitsDlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
CheckBox(hwndDlg);

case WM_CTLCOLORDLG:
return (LONG)(LONG_PTR)hbrush;

case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam,TRANSPARENT);
return (LONG)(LONG_PTR)hbrush;

case WM_COMMAND:
{
switch( LOWORD(wParam) )
{
case IDOK:
{
EndDialog(hwndDlg, 0);
break;
}
}

return TRUE;

}
}

return FALSE;
}
void CheckBox(HWND hdlg)
{

//si le groupe est vrai on coche le checkbox correspondant
if(BoolGroupe[0]==true)
CheckDlgButton(hdlg,IDC_G0, (WPARAM) BST_CHECKED);

if(BoolGroupe[1]==true)
CheckDlgButton( hdlg, IDC_G1, (WPARAM) BST_CHECKED);

if(BoolGroupe[2]==true)
CheckDlgButton(hdlg, IDC_G2, (WPARAM) BST_CHECKED);

if(BoolGroupe[3]==true)
CheckDlgButton(hdlg, IDC_G3, (WPARAM) BST_CHECKED);

if(BoolGroupe[4]==true)
CheckDlgButton(hdlg, IDC_G4, (WPARAM) BST_CHECKED);

if(BoolGroupe[5]==true)
CheckDlgButton( hdlg, IDC_G5, (WPARAM) BST_CHECKED);

if(BoolGroupe[6]==true)
CheckDlgButton(hdlg, IDC_G6, (WPARAM) BST_CHECKED);

if(BoolGroupe[7]==true)
CheckDlgButton(hdlg, IDC_G7, (WPARAM) BST_CHECKED);

if(BoolGroupe[8]==true)
CheckDlgButton(hdlg, IDC_G8, (WPARAM) BST_CHECKED);

if(BoolGroupe[9]==true)
CheckDlgButton(hdlg, IDC_G9, (WPARAM) BST_CHECKED);
}

BOOL CALLBACK PdfDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg) {
case WM_INITDIALOG:
InitDialogPdf(hdlg);
return 1;

case WM_CTLCOLORDLG:
return(LONG)(LONG_PTR)hbrush;

case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam,TRANSPARENT);
return (LONG)(LONG_PTR)hbrush;

case WM_SYSCOMMAND:
if(wParam == SC_CLOSE)
{
CloseDataBase();
EndDialog(hdlg,0);
return 0;
}
case WM_COMMAND:
switch(wParam) {
case IDC_Browse:
OnBrowse();
return 0;
case IDC_Ouvrir:

if(GetWindowText(hedname, szfile, 264))
{
EnlevePointPdf();

if(DecryptFichier(sztitle ,szfile)==1)//on décrypte le fichier et on vérifie les droits
{
ShellExecute(NULL, "open", FichierPdf,NULL, NULL, SW_MAXIMIZE);
}
SendDlgItemMessage (hdlg,IDC_pdf,WM_SETTEXT,0,(LONG)(LONG_PTR) "");
}
else
{
MessageBox(hdlg, "nom de fichier requis" , "Erreur !", MB_ICONEXCLAMATION);
PostMessage(hdlg, WM_NEXTDLGCTL, (WPARAM) hedname, 1);
}
return 0;

case IDC_Print:

if(GetWindowText(hedname, szfile, 264))
{
EnlevePointPdf();
if(DecryptFichier(sztitle ,szfile)==1)//on décrypte le fichier et on vérifie les droits
{
char FichierPdfAImprimer[MAX_PATH];
sprintf(FichierPdfAImprimer,"%s %s","/p",FichierPdf);
ShellExecute(NULL, NULL, "acrord32",FichierPdfAImprimer, NULL, SW_MAXIMIZE);
}
SendDlgItemMessage (hdlg,IDC_pdf,WM_SETTEXT,0,(LPARAM) "");
}
else
{
MessageBox(hdlg, "nom de fichier requis" , "Erreur !", MB_ICONEXCLAMATION);
}
return 0;

case IDC_RetourMenu:
EndDialog(hdlg, 0);
return 1;


case IDCANCEL:
CloseDataBase();
EndDialog(hdlg,0);
return 0;
}
}
return 0;

}

void InitDialogPdf(HWND hdlg)
{
//on charge l'icone SGCV
SetClassLong(hdlg, GCL_HICON, (LONG)(LONG_PTR)LoadIcon(hinst,(LPCTSTR) IDI_SGCV));

hedname = GetDlgItem(hdlg, IDC_pdf);

//On charge les images dans les boutons
//.........(GetDlgItem(identifiant,NomBouton), BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)Nom Du Bitmap));
SendMessage(GetDlgItem(hdlg, IDC_Browse) , BM_SETIMAGE, IMAGE_ICON,(LONG)(LONG_PTR) LoadIcon(hinst, (LPCTSTR)IDI_BROWSE));//image dans bouton
SendMessage(GetDlgItem(hdlg,IDC_Ouvrir ) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_PDF));
SendMessage(GetDlgItem(hdlg,IDC_Print ) , BM_SETIMAGE, IMAGE_BITMAP,(LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_PRINT));
SendMessage(GetDlgItem(hdlg,IDC_RetourMenu ) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_RetourMenu));
SendMessage(GetDlgItem(hdlg, IDCANCEL) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Quitter));

}

BOOL CALLBACK MenuDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{

switch(mssg)
{
case WM_INITDIALOG:
InitDialogMenu(hdlg);
return 1;

case WM_NOTIFY:
InfoBullesMenu(lParam);
return 0;


case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam,TRANSPARENT);
return (LONG)(LONG_PTR)hbrush;

case WM_CTLCOLORDLG:
return (LONG)(LONG_PTR)hbrush;

case WM_COMMAND:// on regarde les messages relatifs aux controles

// les 16 bits de poids faible (recuperes par la macro LOWORD()) nous indiquent
// le controle concerne par le message.
switch( LOWORD(wParam) ){
// bouton 'Exit'
case ID_FILE_EXIT:

// on quitte le dialogue en renvoyant la valeur 0 en valeur de retour.
// Attention !! cela ne veut pas dire que l'on quitte l'application mais
// juste que le dialogue est tue.
CloseDataBase();
EndDialog(hdlg, 0);
break;


// Item du menu nomme 'A propos de cette application ...'
case ID_ABOUT_ABOUTTHISAPPLICATION:

// on lance un autre dialogue (de type modal ici pour forcer l'utilisateur a
// cliquer sur OK pour revenir au dialogue principal).
DialogBoxParam(hinst, (LPCTSTR)IDD_ABOUT, hdlg, AboutDlgProc, 0);
//DialogBox( hinst, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hdlg, AboutDlgProc );
break;

case ID_DROIT:

// on lance un autre dialogue (de type modal ici pour forcer l'utilisateur a
// cliquer sur OK pour revenir au dialogue principal).
DialogBoxParam(hinst, (LPCTSTR)IDD_DROITS, hdlg, DroitsDlgProc, 0);
//DialogBox( hinst, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hdlg, AboutDlgProc );
break;

case IDCANCEL:
CloseDataBase();
EndDialog(hdlg,0);
return 0;

case IDC_pdf:
DialogBoxParam(hinst, (LPCTSTR)IDD_Ouvrirpdf, hdlg, PdfDlgProc, 0);
return 0;

}

}

return 0;

}

void InitDialogMenu(HWND hdlg)
{

Droits(hdlg);

//images dans boutons
SendMessage(GetDlgItem(hdlg, IDC_pdf) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_PDF));
SendMessage(GetDlgItem(hdlg, IDCANCEL) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Quitter));
SendMessage(GetDlgItem(hdlg, IDC_rech) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Recherche));
SendMessage(GetDlgItem(hdlg, IDC_maj) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Miseajour));
SendMessage(GetDlgItem(hdlg,IDC_Hist ) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Historique));

// on charge le menu

hMenu = LoadMenu( hinst, MAKEINTRESOURCE(IDR_MENU1) );
if( hMenu )
// on attache le menu a la boite de dialogue
SetMenu( hdlg, hMenu );
SetClassLong(hdlg, GCL_HICON, (LONG)(LONG_PTR)LoadIcon(hinst, (LPCTSTR)IDI_SGCV));
//PostMessage(hdlg, WM_INITMDB, 0, 0); // laisse fenêtre s'afficher

}

BOOL CALLBACK MotdepasseDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{

char Login[10];
char Password[16];

switch(mssg)
{
case WM_INITDIALOG:
{
InitDialogMotdepasse(hdlg);
return 1;
}

case WM_CTLCOLORSTATIC:
{
SetBkMode((HDC)wParam,TRANSPARENT);
return (LONG)(LONG_PTR)hbrush;
}

case WM_CTLCOLORDLG:
return (LONG)(LONG_PTR)hbrush;

case WM_COMMAND:
switch(wParam)
{
case IDCANCEL:
{
//ferme les bases de données
CloseDataBase();
//fin du dialog
EndDialog(hdlg, 0);
//return 0
return 0;
}

case IDENTRER:
{

//enregistre le champs IDC_Login dans login
GetDlgItemText(hdlg,IDC_Login,Login,10);

//enregistre le champs IDC_Mp dans motdepasse
GetDlgItemText(hdlg,IDC_Mp,Password,16);

//vérification du mot de passe
VerifMotdepasse(Login,Password,hdlg);
return 0;
}
}

}
return 0;
}

void InitDialogMotdepasse(HWND hdlg)
{

//images dans boutons
SendMessage(GetDlgItem(hdlg, IDENTRER) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Valider));
SendMessage(GetDlgItem(hdlg, IDCANCEL) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Quitte));

//chargement de l'icone
SetClassLong(hdlg, GCL_HICON, (LONG)(LONG_PTR)LoadIcon(hinst, (LPCTSTR)IDI_SGCV));

}

BOOL CALLBACK BienvenueDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{

switch(mssg)
{
case WM_INITDIALOG:

//images dans boutons
SendMessage(GetDlgItem(hdlg, IDENTRER) , BM_SETIMAGE, IMAGE_BITMAP,(LONG)(LONG_PTR) LoadBitmap(hinst, (LPCTSTR)IDB_Entrer));
SendMessage(GetDlgItem(hdlg, IDCANCEL) , BM_SETIMAGE, IMAGE_BITMAP, (LONG)(LONG_PTR)LoadBitmap(hinst, (LPCTSTR)IDB_Quitter));
//icone de la fenêtre
SetClassLong(hdlg, GCL_HICON, (LONG)(LONG_PTR)LoadIcon(hinst, (LPCTSTR)IDI_SGCV));
//copy le hwnd de la fenêtre en cours dans hmain
return 1;

case WM_CTLCOLORDLG:
return (long)(LONG_PTR)hbrush;

case WM_CTLCOLORSTATIC:
SetBkMode((HDC)wParam,TRANSPARENT);
return (long)(LONG_PTR)hbrush;

case WM_COMMAND:
switch(wParam)
{
case IDCANCEL:
{
SetCursor(LoadCursor(0, IDC_WAIT));
CloseDataBase();
SetCursor(LoadCursor(0, IDC_ARROW));
EndDialog(hdlg, 1);
return 0;
}
case IDENTRER:
EndDialog(hdlg, 0);
DialogBoxParam(hinst, (LPCTSTR)IDD_Motdepasse, hdlg,MotdepasseDlgProc, 0);
return 1;
}
}
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
hinst = hInstance;

DialogBoxParam(hInstance, (LPCTSTR)IDD_Bienvenue, 0, BienvenueDlgProc, 0);
return 0;
}
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Dans BienvenueDlgProc, tu crees une fenetre fille de hdlg alors que tu la tues avant par EndDialog, un peu de coherence stp.
Je t'avais deja arrange cela dans ton ancien proj.
Regle ce point, si besoin reorganise le deroulement du prog.
On verra le reste ensuite.

ciao...
BruNews, Admin CS, MVP Visual C++