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

Résolu
ag1987 Messages postés 3 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 25 mai 2009 - 15 mai 2009 à 09:44
ag1987 Messages postés 3 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 25 mai 2009 - 20 mai 2009 à 09:29
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

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
15 mai 2009 à 17:39
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()
3
ag1987 Messages postés 3 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 25 mai 2009
20 mai 2009 à 09:29
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!
3
ag1987 Messages postés 3 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 25 mai 2009
19 mai 2009 à 13:34
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?
0
Rejoignez-nous