Problème de réinitialisation lorsque l'on ferme par la croix rouge [Résolu]

Signaler
Messages postés
3
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
25 mai 2009
-
Messages postés
3
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
25 mai 2009
-
Bonjour,

Je programme en C++ avec Microsoft Visual C++ 6.0, et je travail sur un projet qui utilise les MFC.

J'ai un problème de réinitialisation lorsque je quitte mon application par la croix rouge!!!!
J'ai essayer de réaliser ce code mais cela ne fonctionne pas! Ma variable "position" qui se trouve dans mon fichier .ini n'est pas remise à 0.

//permet de mettre en haut à droite de la fenêtre les icônes réduire, agrandir et fermer
DWORD dwStyle = ::GetWindowLong(m_hWnd,GWL_STYLE);
dwStyle |= WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
::SetWindowLong(m_hWnd,GWL_STYLE, dwStyle | WS_SYSMENU);
 
if(WS_SYSMENU==TRUE)
{
OnMenuQuitter();
}

Le test que je veux faire, est lorsque je clic sur la croix rouge alors je réinitialise ma variable postion dans mon fichier .ini.
Mais j'ai l'impression que ce n'est pas le bon test ou pas le bon code??!!!

Code de le fonction OnMenuQuitter
// PERMET DE QUITTER LE PROGRAMME A PARTIR DU MENU
void CIndicDlg::OnMenuQuitter()
{
    if(AfxMessageBox("Voulez-vous vraiment quitter l'application ?",MB_YESNO) == IDYES)  // si confirmation
    {
       if(!m_IniFile.Load(affiche))// Si le fichier INI est introuvable
       {
         AfxMessageBox("Erreur lors de la lecture du fichier fichier.ini",MB_ICONERROR); // affiche un message qui indique l'erreur
       }
        m_IniFile.SelectSection("POS");// selectionne la section POS
 
        long pos;
        m_IniFile.GetValue("Position",pos); //  récupère la valeur de "Position" qui correspond au nombre de session ouverte du logiciel
        if(pos==2)// si 2 sessions ouvertes...
        {
           WritePrivateProfileString("POS","Position","1",affiche); // décrémentation...
        }
       if(pos==1)// si 1 session ouverte...
        {
           WritePrivateProfileString("POS","Position","0",affiche); // décrémentation aussi
        }
  
       EndDialog(1);       //  fermeture de l'application
      }
}

3 réponses

Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
A tester, enn gros :

il faut que tu ajoutes l'événement WM_CLOSE (le wizard va te créer CIndicDlg::OnClose)

Et c'est là que tu mets le code que tu as mis dans OnMenuQuitter.

dans OnMenuQuitter tu fais juste this->Close();

dans ta nouvelle OnMenuQuitter tu remplaces EndDialog par CDialog::Close()
Messages postés
3
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
25 mai 2009

Ok merci ça fonctionne! sauf que le this->Close  que j'ai mis dans OnMenuQuitter ne ferme pas l'appli lorsqu'elle est lancée mais elle réduit ma fenêtre!!!
J'ai donc laissé le code précédent et ça fonctionne.

Merci fregelo52!
Messages postés
3
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
25 mai 2009

Où ajouter l'évènement WM_CLOSE?


Ci je fais juste this-> Close dans OnMenuQuitter tu crois que ca va bien remettre ma variable postion dans mon fichier .ini?