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 :

Poster et récupérer un message


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    cedrix57
    Invité(e)
    Par défaut Poster et récupérer un message
    Bonjour,

    Je débute avec les MFC, et je n'arrive pas à poster et récupérer un message. Voici ce que j'ai fais :
    J'ai une classe CustomListBox qui hérite de CVSListBox. J'ai reécrite une de ses méthodes virtuelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void CustomListBox::OnSelectionChanged(){
      PostMessage(LVN_ITEMCHANGED);
    }
    J'ai vérifier avec le débogueur, je rentre bien dans cette fonction.

    Ensuite dans ma classe MainWindow qui possède une instance de CustomListBox j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BEGIN_MESSAGE_MAP(MainWindow, CDialog)
      ON_NOTIFY(LVN_ITEMCHANGED, IDC_MFCVSLISTBOX1, &MainWindow::OnConfigListSelChange)
      //ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, &MainWindow::OnConfigListSelChange)
    END_MESSAGE_MAP()
     
    void MainWindow::OnConfigListSelChange(NMHDR* pNMHDR, LRESULT* pResult){
      NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
      *pResult = 0;
    }
    Mais je ne rentre jamais dans cette dernière fonction. Quelqu'un sait comment je dois m'y prendre ?

    Merci d'avance
    Dernière modification par cedrix57 ; 12/03/2012 à 14h53.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 440
    Par défaut
    Vous avez utilisé la méthode "PostMessage" et non la fonction libre.

    Vous postez donc votre message à la même fenêtre que celle qui appel la méthode "PostMessage".

    Utilisez la fonction "PostMessage"
    http://msdn.microsoft.com/fr-fr/library/ms644944.aspx

    Mais pour ce type de dialogue, moi, je passerais par des WM_COMMAND, histoire de profiter des règles de routing spécifiques des commandes.

  3. #3
    cedrix57
    Invité(e)
    Par défaut
    Finalement j'ai trouvé un truc qui marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(this->parent != NULL){
        this->parent->SendMessage(WM_COMMAND, MSG_CONFIG_CHANGED, NULL);
      }
    Et je récupère mon message de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN_MESSAGE_MAP(MainWindow, CDialog)
      ON_COMMAND(MSG_CONFIG_CHANGED, &MainWindow::OnConfigListSelChange)
    END_MESSAGE_MAP()
    Par contre avec cette méthode, pour envoyer un message à un objet B (en l’occurrence parent) depuis un objet A il faut avoir un pointeur vers B depuis A.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 440
    Par défaut
    Utilisez la fonction "PostMessage"
    Donc remplacez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(this->parent != NULL){
        this->parent->SendMessage(WM_COMMAND, MSG_CONFIG_CHANGED, NULL);
      }
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::PostMessage(NULL,WM_COMMAND, MSG_CONFIG_CHANGED, NULL);/
    Les MFC dispose d'une infrastructure de routage des WM_COMMAND qui permet d'arroser tous les CmdTarget dont le ou les documents ainsi que leurs vues associées.

    Donc, postez le message WM_COMMAND en aveugle et vous devriez le récupérer dans la ou les objets qui en ont besoin.

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

Discussions similaires

  1. [Outlook] Impossible de récupérer mes messages ...
    Par Rumeurs dans le forum Outlook
    Réponses: 4
    Dernier message: 13/04/2006, 19h05
  2. [outllok2003] Récupérer des messages supprimé
    Par m-mas dans le forum Outlook
    Réponses: 7
    Dernier message: 21/02/2006, 16h47
  3. Récupérer un message d'erreur
    Par yvancoyaud dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/09/2005, 07h58
  4. Réponses: 6
    Dernier message: 30/12/2003, 17h37
  5. [TControl] Récupérer le message court et long du hint ?
    Par Cornell dans le forum Composants VCL
    Réponses: 6
    Dernier message: 19/11/2003, 08h55

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