Euh, une petite minute: Je n'avais pas vu que tu étais en MFC.
Pourquoi as-tu une des WindowProc/DialogProc ?
PS: Le comptage, tu n'es pas obligé de le faire dans la boucle de message en fait.
Je te conseillerais mettre un compteur dans ta CWinApp, et dans le OnCreate de chaque fenêtre, faire:
static_cast< CMonProgrammeApp * >(AfxGetApp())->IncrementerCompteurFenetres();
Et dans les OnDestroy:
1 2 3
| static_cast< CMonProgrammeApp * >(AfxGetApp())->DecrementerCompteurFenetres();
if(static_cast< CMonProgrammeApp * >(AfxGetApp())->GetCompteurFenetres() == 0)
::PostQuitMessage(0); |
Avec ce code, l'utilisateur peut fermer les fenêtres dans n'importe quel ordre, et l'application ne se terminera que quand toutes les fenêtres seront fermées.
Pour fermer d'autres fenêtres, le problème vient du AfxGetMainWnd() qui ne retourne que la fenêtre principale (celle créée dans InitInstance()).
Si tu veux fermer d'autres fenêtres, tu dois leur envoyer WM_SYSCOMMAND(SC_CLOSE) ou simplement WM_CLOSE. Mais pour cela, il te faut l'adresse de l'objet CWnd, ou le HWND de la fenêtre destinataire.
Partager