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 :

Notification vers un CDocument


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Notification vers un CDocument
    Bonjour,

    Un thread de communication de données doit notifier un CDocument (qui diffusera l'info vers ses vues par un UpdateAllviews).
    J'ai choisi la méthode de créer une fenêtre cachée qui sera notifiée par le thread par un PostMessage.
    Dans le traitement du message, une callback de mon document sera appelée.
    Voici le code mis en oeuvre pour la définition de la fenêtre cachée
    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
     
    #define WM_USER_REFRESH_TDB 0x500 // Message signalant à l'IHM qu'il faut rafraichir
                                      // l'affichage correspondant au DashBoard
     
    static void refreshCallback(LPVOID lpParam, unsigned nbRefresh)
    {
        HWND hWindow = (HWND)lpParam;
        ::PostMessage(hWindow, WM_USER_REFRESH_TDB, nbRefresh, 0);
     
    }
     
    IMPLEMENT_DYNCREATE(CHiddenWnd, CWnd)
     
    BEGIN_MESSAGE_MAP(CHiddenWnd, CWnd)
        ON_MESSAGE(WM_USER_REFRESH_TDB, OnRefreshDashboard)
    END_MESSAGE_MAP()
     
    LRESULT CHiddenWnd::OnRefreshDashboard(WPARAM wparam, LPARAM lparam /*ignored*/)
    {
        m_pDoc->cbDashboardRefresh(wparam);
        return 0;
    }
    La création de la fenêtre est faite dans le constructeur de mon document (création de fenêtre d'après un exemple trouvé sur le Web) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        m_hiddenWnd.Create( NULL        // class name, left MFC invent one
                          ,  NULL       // title, meaningless
                          ,  WS_CHILD   // child window
                                        // conspicuous by its absense:
                                        // WS_VISIBLE
                          , CRect(0,0,10,10) // useless nonempty rectangle
                          , AfxGetMainWnd()  // attach to main window, need someplace
                          , IDC_STATIC);      // window ID
        m_hiddenWnd.m_pDoc = this;
        // positionnement de la callback de notification d'un rafraichissement du dashboard
        m_Dashboard.SetRefreshCallback(refreshCallback, m_hiddenWnd.GetSafeHwnd());
    Or celà ne marche pas ...
    Je rentre bien régulièrement dans ma callback de notification dans laquelle je fais le PostMessage mais je ne rentre pas dans la routine de traitement du message (OnRefreshDashboard).
    Il me semble l'avoir vu marché hier-soir sur mon PC perso. Mais ce matin sur mon PC pro, impossible de le faire tourner ...
    J'utilise Visual C++2005 (sur mes deux PC).

    Quelqu'un a-t-il une idée ?

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Points : 14
    Points
    14
    Par défaut OK, j'ai trouvé.
    J'avais mis la destruction de la fenêtre dans la méthode DeleteContents de CDocument, or, cette méthode est appelée dans la séquence d'initialisation du CDocument => en déplaçant la destruction dans le destructeur de mon CDocument, tout rentre dans l'ordre.
    Désolé pour lé dérangement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/12/2012, 10h30
  2. Notification depuis mySQL vers un client
    Par ZeKlubb dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/10/2007, 10h28
  3. Notification vers les clients
    Par Linio dans le forum CORBA
    Réponses: 6
    Dernier message: 26/05/2006, 18h30
  4. Réponses: 2
    Dernier message: 05/11/2005, 14h48
  5. Réponses: 1
    Dernier message: 13/05/2002, 10h19

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