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

ag1987 3 Messages postés jeudi 14 mai 2009Date d'inscription 25 mai 2009 Dernière intervention - 15 mai 2009 à 09:44 - Dernière réponse : ag1987 3 Messages postés jeudi 14 mai 2009Date d'inscription 25 mai 2009 Dernière intervention
- 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
      }
}
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
fregolo52 1108 Messages postés mercredi 15 juin 2011Date d'inscription 10 juillet 2018 Dernière intervention - 15 mai 2009 à 17:39
3
Merci
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()

Merci fregolo52 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de fregolo52
Meilleure réponse
ag1987 3 Messages postés jeudi 14 mai 2009Date d'inscription 25 mai 2009 Dernière intervention - 20 mai 2009 à 09:29
3
Merci
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!

Merci ag1987 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de ag1987
ag1987 3 Messages postés jeudi 14 mai 2009Date d'inscription 25 mai 2009 Dernière intervention - 19 mai 2009 à 13:34
0
Merci
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?
Commenter la réponse de ag1987

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.