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 :

arrêt automatique d'une appli.


Sujet :

MFC

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut arrêt automatique d'une appli.
    Bonjour,

    Je voudrais savoir comment faire en sorte que l'application que je développe s'arrête d'elle même si elle n'a reçu aucune commande au bout de 5 minutes, à la manière d'un économiseur d'écran.

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    tu mets en place un timer de 5 mn (voir faq);
    dans le message réponse tu fermes l'application:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AfxGetMainWnd()->PostMessage(WM_CLOSE);
    si il y a une commande tu kill le timer et tu le remet en place quand la commande est terminée.

  3. #3
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Salut,

    Comment, au sein de l'appli, je détecte la réception d'une commande ?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    quel est le sens du mot commande pour toi ?
    sinon tu peux mettre en place ton timer dans onidle

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Salut,

    pour moi, c'est ce que je mets en général dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN_MESSAGE_MAP(.....,......)
         ON_COMMAND( ID_LACOMMANDE,.........)
    END_MESSAGE_MAP()
    Par exemple, au bout de 5 minutes , si aucune commande n'a été lancée ( toute classe confondues - CWinApp, CWnd etc ), il faut que l'appli s'arrête.

  6. #6
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Salut,

    Tu peux surcharger la methode OnCmdMsg de ta MainFrame (objet dérivé de CFrameWnd)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    BOOL CMainFrame::OnCmdMsg(UINT nID,int nCode,void *pExtra,AFX_CMDHANDLERINFO *pHandlerInfo)
    {
      if (nCode==CN_COMMAND && pExtra==NULL)
        InitTimer();           // initialiser le timer ici car une commande est arrivée
     
      return CFrameWnd::OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);
    }
    Si ton appli est une MDI, faut mettre ça plutot dans CMDIChildWnd (CChildFrame)

    Ca marche très bien, je m'en suis déjà servi pour d'autres raisons.

    @+

  7. #7
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Salut,

    merci pour le tuyau.
    Ca marche même dans la classe dérivée de CWinApp.
    Ca réagit si je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (nCode==IF_FILE_NEW && pExtra==NULL)
    par exemple.
    Par contre, quelle est la fonction du *pExtra ?

    Merci encore.

  8. #8
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Rectification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (nID==IF_FILE_NEW && pExtra==NULL)

  9. #9
    Membre confirmé Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Points : 521
    Points
    521
    Par défaut
    Si tu le mets dans CWinApp tu risques de ne pas voir toutes les commandes.
    Le routage des commandes commence par la MainFrame et termine par CWinApp. Si entre temps la commande est traitée, elle n'arrivera pas jusqu'à CWinApp. Mais dans le cas du ID_FILE_NEW c'est ok, puisqu'il n'y a que CWinApp qui traite cette commande par défaut.

    Le pExtra est un paramètre pour passer un pointeur sur une classe du type CCmdUI pour les mises à jour des états de bouton / menu ... Si pExtra!=NULL, il s'agit alors d'une mise à jour et non d'une action.

    Si tu ne souhaites qu'intercepter ID_FILE_NEW, tu peux surcharger OnCommand(), c'est plus simple. Je pensais que tu voulais intercepter tout type de commande ...

    @+

  10. #10
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    256
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 256
    Points : 96
    Points
    96
    Par défaut
    Effectivement, je viens de m'en rendre compte comme pour la commande "imprimer" entre autres.
    Tu avais bien compris que je voulais intercepter toutes les commandes mais je me suis trop hâté pour répondre.
    Mais maintenant, je sais dans quelle direction chercher,
    Merci encore

  11. #11
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    il te reste a gérer le cas ou le programme est lancé et pas de commandes dans les 5 mn, si ce cas existe bien sur ...

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

Discussions similaires

  1. [Débutant] mise à jour automatique d'une appli fonctionnant avec une bdD locale
    Par noftal dans le forum VB.NET
    Réponses: 21
    Dernier message: 19/12/2013, 11h08
  2. Relance automatique d'une appli qui peut planter
    Par Bart_lx dans le forum Linux
    Réponses: 2
    Dernier message: 08/04/2008, 16h29
  3. Diffusion automatique d'une appli ?
    Par OtObOx dans le forum Modélisation
    Réponses: 12
    Dernier message: 17/11/2007, 17h32
  4. Réponses: 3
    Dernier message: 23/06/2006, 11h58
  5. Réponses: 4
    Dernier message: 20/08/2004, 11h08

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