IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

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


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut Problème de réinitialisation lorsque l'on ferme par la croix rouge
    Bonjour,

    j'utilise pour fermer ma boîte de dialog la croix en haut à gauche!
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DWORD dwStyle=::GetWindowLong(m_hWnd,GWL_STYLE);
    dwStyle |= WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
    ::SetWindowLong(m_hWnd,GWL_STYLE, dwStyle | WS_SYSMENU);
    Je voulais savoir s'il était possible de pouvoir mettre une variable à 0, qui se trouve dans un fichier .ini lorsque l'on clic sur la croix de fermeture d'application?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par défaut
    Bonjour

    Si tu override ta fonction onClose() tu peux évidemment mettre
    par un Writeprivateprofilestring une variable dans un .ini

    Cordialement

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Es ce que tu pourrais être un peut plus clair? car je débute en visual C++

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    J'aimerais savoir si à la fermeture de mon application avec la croix rouge on peut remettre une variable d'un fichier .ini à 0?

    Pour remettre une variable dans un fichier .ini il faut utiliser la comande suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WritePrivateProfileString(
    	"POS",		//Nom_Section
    	"Position",	//Nom_Key
    	"0",		// indique la postion que l'on veut mettre ici on veut la réinitialiser donc on met un 0.	
    	affiche);		//affiche correspond a l'adresse du fichier Indic.ini

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    Un petit coup de main svp!!!

    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.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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
    	}
    }

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    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()
    Si quelqu'un comprend où il faut ajouter l'évènement WM_CLOSE?

  7. #7
    Membre chevronné
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Par défaut
    Bonjour,

    Je crois que tu devrais (re)lire les tutoriels sur les MFC :
    Démarrer avec les MFC sous Visual C++
    Démarrer avec les MFC avec Visual studio 2005 (Volume 2)
    Tu trouveras notamment un passage intéressant en page 25 du premier...

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Par défaut
    merci pour les infos!!

    J'ai donc ajouter l'évènement WM_CLOSE!!
    J'ai recopier le code que j'ai mis dans OnMenuQuitter et j'ai remplacer EndDialog par CDialog::OnClose().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    void CIndicDlg::OnClose() 
    {
    		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
    		}
    	}
     
    	CDialog::OnClose();
    }
    Par contre je n'ai pas mis le dans OnMenuQuitter car lorsque je fermais ma fenêtre par le menu et bien cela réduisais ma fenêtre au lieu de la fermer!!!
    J'ai donc laisser le code qui était mis avant!!

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Carte IGN remplacée par une croix rouge
    Par fredm69 dans le forum IGN API Géoportail
    Réponses: 1
    Dernier message: 03/02/2010, 10h46
  2. Réponses: 1
    Dernier message: 26/09/2009, 01h41
  3. Réponses: 13
    Dernier message: 20/07/2007, 13h51
  4. Réponses: 5
    Dernier message: 06/01/2006, 18h13
  5. Probléme lorsqu'une fenétre passe par dessus l'autre...
    Par hostile dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 03/01/2006, 19h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo