Detecter la fermeture

Résolu
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007 - 28 oct. 2007 à 16:58
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 oct. 2007 à 14:20
Bonjour,


J'aimerais savoir quand un utilisateur clique sur la croix de fermeture de mon application. Comment puis-je procéder?


(J'utilise les "form" de Visual C++ Express)


Merci

 ElpenS

9 réponses

cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
29 oct. 2007 à 14:04
Bon, après une longue, très longue cogitation, j'ai trouvé...

C'est peut-être fait très bizarrement, mais ça fonctionne...

J'ai fait:

protected

:
virtual System::Void OnClosing(System::ComponentModel::CancelEventArgs^ e)
override;
Dans le .h et Application::Exit() dans le code...

 ElpenS
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 oct. 2007 à 14:20
Ce sabir interprété te semble vraiment plus lisible ?

On va comparer:
#include <windows.h>
#include "resource.h"


BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      return 1;
    case WM_COMMAND:
      switch(wParam) {
        case IDOK:
         
          return 0;
        case IDCANCEL: EndDialog(hdlg, 0);
      }
  }
  return 0;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
  hinst = hInstance;
  DialogBoxParam(hInstance, (LPCTSTR)IDD_APP, 0, AppDlgProc, 0);
  return 0;
}

Ne me semble pas y avoir photo, on a tout devant les yeux illico prêt à être modifié.
Si on ahjoute les performances incomparables et l'indépendance de toute virtual machine, il n'y a rien qui puisse justifier l'interprété.

ciao...
BruNews, MVP VC++
3
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
28 oct. 2007 à 18:16
Salut,
Au clic sur la croix de fermeture d'une fenêtre, la procédure WndProc de cette fenêtre reçoit le message WM_CLOSE. Il suffit donc de traiter ce message. Regarde les exemples de sources du site.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 oct. 2007 à 19:11
Le 1er msg sera WM_COMMAND - IDCANCEL sur une dialogbox.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
29 oct. 2007 à 10:07
Hello,

J'ai testé ce que vous m'avez dit mais cela ne fonctionne pas...

J'ai dans le .h:

protected

:
static void WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
Et dans le .cpp:

void

Main::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   
switch(message)
   {

   case WM_QUIT:
      Application::Exit();

   case WM_CLOSE:
      Application::Exit();
  }
}
Cependant, je ne passe jamais dans cette méthode... Ne dois-je pas la lier avec ma forme?

Merci

 ElpenS
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
29 oct. 2007 à 10:25
brunews a deja dit sur un dialog c'est different . et commence cela il y du code dans le .h separe ce qui va dans le point h et l'implementation dans le point .cpp
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
29 oct. 2007 à 10:57
Ok, donc j'ai fait:

LRESULT CALLBACK Main::WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{

   switch(message)
   {

      case WM_COMMAND:

         switch(LOWORD(wParam))
         {

            case IDCANCEL:
               Application::Exit();

               return 0;
         }

      case WM_QUIT:
         Application::Exit();

         return 0;

      case WM_CLOSE:
            Application::Exit();

            return 0;
   }
}
Mais quand je clique sur la croix, je ne passe toujours pas dans cette méthode...

 ElpenS
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 oct. 2007 à 11:34
case WM_COMMAND:
         switch(LOWORD(wParam))
         {
            case IDCANCEL:
               Application::Exit();
               return 0;
         }

     return 0; // MANQUANT DANS TON CODE
etc....

ce qui ne devrait pas changer grand chose de ton exemple.

C'est quoi la plus-value de compliquer le code API avec des classes et méthodes ?

ciao...
BruNews, MVP VC++
0
cs_elpens Messages postés 260 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 3 novembre 2007
29 oct. 2007 à 11:42
C'est quoi la plus-value de compliquer le code API avec des classes et méthodes ?
- Simplement pour une question de lisibilité...

Mais je ne capte pas tout...

Pourquoi lorsque je clique sur cette *"@#ç"+ de croix, je ne passe pas dans cette méthode???

Merci

 ElpenS
0
Rejoignez-nous