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 :

[MFC] - Prob. Timer


Sujet :

MFC

  1. #1
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut [MFC] - Prob. Timer
    Bonjour,

    je fais un p'tit prog sous forme d'une boîte de dialogue.

    J'ai ma classe Dlg qui contient une instance de la classe A.
    Cette classe A hérite de la classe B qui elle même hérite de la classe générique CWnd.

    J'ai besoin d'utiliser un timer dans ma classe A.

    Pour cela, j'ai lancé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetTimer(IDEventA, PeriodEventA, NULL)
    Et bien entendu, j'ai intégré à la classe A, la fonctionnalité liée à l'évènement WM_TIMER
    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
    void CA::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Add your message handler code here and/or call default
       switch (nIDEvent)
       {
       case IDEventA :
          {
             MessageBox("Essai Timer") ;
             break ;
          }
       default :
          {
             break ;
          }
       }
    	CPilot3D_port::OnTimer(nIDEvent);
    }
    Quand je lance mon exécutable, il m'indique que la fonction setTimer a été réussie mais je ne rentre jamais dans mon OnTimer .....

    Seriez vous déjà tombé sur ce cas ou auriez vous une idée ?



    Alice

    PS : avant de fermer, je tue mon timer par un killtimer qui est lui aussi réussi ....

  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
    Par défaut
    salut,
    SetTimer est lancé dans une fonction de la classe CA ?
    tu as bien intercepté le message WM_TIMER avec class wizard ?
    tu as bien dans ton message map :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN_MESSAGE_MAP(CA, CDialog)
    	//{{AFX_MSG_MAP(CA)
    	ON_WM_TIMER()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    ?



  3. #3
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut re
    C'est tout à fait juste.

    Le setTimer est réalisé dans ma classe A où est présent le OnTimer déclaré via le wizard et j'ai bien ON_WM_TIMER dans le MESSAGE_MAP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN_MESSAGE_MAP(CA, CB)
       //{{AFX_MSG_MAP(CA)
    	ON_WM_TIMER()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    J'ai déclaré ma classe A comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class CA : public CB
    {
    ...
    };
    est ce un problème d'héritage ?

  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
    Par défaut
    re,
    WM_TIMER est aussi intercepté dans la classe parent ?


  5. #5
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    la classe Dlg qui a une instance de la classe A n'intercepte pas l'évènement WM_TIMER.

    la classe B dont hérite la classe A n'intercepte pas non plus l'évènement WM_TIMER.


  6. #6
    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
    Par défaut
    tu as mis un point d'arret dans la fonction OnTimer (en dehors du swtich)?
    quelles sont les valeurs de IDEventA et PeriodEventA ?

  7. #7
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Voici ce que j'ai dans mon timer :
    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
    void CA::OnTimer(UINT nIDEvent) 
    {
    	// TODO: Add your message handler code here and/or call default
       switch (nIDEvent)
       {
       case IDEventA  :
          {
             MessageBox("pio") ;
            break ;
          }
       default :
          {
             break ;
          }
       }
     
    	CPilot3D_port::OnTimer(nIDEvent);
    }
    donc non je n'ai pas de point d'arrêt dans le timer en dehors du switch.
    et les constantes ont pour valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define IDEventA   0x0070 
    #define PeriodEventA  5
    qu'en penses tu ?


  8. #8
    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
    Par défaut
    re,
    bon ça doit etre gros comme une maison
    verifie en trace debug si tu passes dans la fonction OnTimer .
    a quel moment tu as mis en place le timer ?
    a quel moment tu as detruit le timer ?


  9. #9
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Quand je trace dans un fichier mon appli, voici ce qui se passe

    A la création de ma boîte de dialogue, je créé l'instance de ma classe A.
    Puis j'exécute l'initialisation de ma classe A avec la fonction Init().
    Puis je lance la fonction OpenPortM().
    Cette fonction ouvre un dialogue TCP/IP et établi la lecture du port
    de réception.
    Enfin elle lance mon timer.

    là normalement le timer est effectué au moins une fois.
    -> Mais quand je trace dans un fichier, je m'aperçois qu'il n'y passe pas.

    je tue le timer au moment où ma classe A est détruite.


  10. #10
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Finalement j'ai mis mon timer dans la classe Dlg (qui a une instance de la classe A). Et celui là fonctionne.

    Quand il est activé je transfert l'arrivée de l'évènement à l'instance de ma classe A.

    Il y a de forte chance qu'il y est beaucoup plus joli à faire mais ça marche donc je me contenterai de ça....

    si tu as une idée du pourquoi que ça ne marche pas, je serais ravie de t'écouter.

    pour tout

    Alice

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

Discussions similaires

  1. MFC prob de prog bitmap-OnDraw-Document
    Par PePedu78 dans le forum MFC
    Réponses: 7
    Dernier message: 16/01/2008, 21h26
  2. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 10h51
  3. [MFC] Thread et timer
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 18/04/2005, 13h03
  4. [MFC] Cherche Timer avec thread
    Par romeo9423 dans le forum MFC
    Réponses: 17
    Dernier message: 09/03/2005, 10h33
  5. [MFC][Debutant] UpdateData, timer et CEdit
    Par Fladnag dans le forum MFC
    Réponses: 2
    Dernier message: 29/01/2004, 06h51

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