Partager via


Gestionnaires pour les messages windows standard

Les gestionnaires par défaut pour les messages standard de windows (WM_) sont intégrés dans la classe CWnd.La bibliothèque de classes base des noms pour ces gestionnaires sur le nom de message.Par exemple, le gestionnaire du message d' WM_PAINT est déclaré dans CWnd comme suit :

afx_msg void OnPaint();

Le mot clé d' afx_msg suggère l'effet du mot clé C++ virtual en distinguant les gestionnaires d'autres fonctions membres d' CWnd .Notez, cependant, que ces fonctions ne sont pas réellement virtuelles ; elles sont plutôt implémentées via des tables des messages.Les tables des messages dépendent uniquement des macros standard de préprocesseur, pas de toutes les extensions au langage C++.Le mot clé d' afx_msg le résout vers l'espace blanc après avoir prétraité.

Pour substituer un gestionnaire défini dans une classe de base, il suffit de définir une fonction avec le même prototype dans votre classe dérivée et exécution d'une entrée de la table des messages pour le gestionnaire.Votre gestionnaire « substitue » tout gestionnaire du même nom dans chacune des classes de base de votre classe.

Dans certains cas, votre gestionnaire doit appeler le gestionnaire substitué dans la classe de base et la classe de base et les fenêtres peuvent gérer le message.Lorsque vous appelez le gestionnaire de classe de base dans la substitution dépend des circonstances.Vous devez parfois appeler le gestionnaire de classe de base en premier et parfois en dernier.Quelquefois vous appelez le gestionnaire de classe de base de manière conditionnelle, si vous choisissez de ne pas traiter le message vous-même.Quelquefois vous devez appeler le gestionnaire de classe de base, puis de manière conditionnelle pour exécuter votre propre code du gestionnaire d'événements, selon la valeur ou l'état retourné par le gestionnaire de classe de base.

Mise en gardeAttention

Il est déconseillé de modifier les arguments passés dans un gestionnaire si vous prévoyez de les passer à un gestionnaire de classe de base.Par exemple, vous pouvez être tenté de modifier l'argument d' nChar du gestionnaire d' OnChar (pour convertir en majuscule, par exemple).Ce comportement est assez obscur, mais si vous devez accomplir cela, utilise la fonction membre SendMessage d' CWnd à la place.

Comment déterminez-vous la méthode appropriée de substituer un message donné ?Lorsque la fenêtre Propriétés écrit la structure de la fonction gestionnaire pour un message donné — un gestionnaire d' OnCreate pour WM_CREATE, par exemple — il trace sous la forme de fonction membre substituée recommandée.L'exemple suivant recommandé que l'appel de gestionnaire d'abord le gestionnaire de classe de base et continue uniquement en sachant qu'il ne retourne pas – 1.

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CFormView::OnCreate(lpCreateStruct) == -1)
      return -1;

   // TODO:  Add your specialized creation code here

   return 0;
}

Par convention, les noms de ces gestionnaires commencent par le préfixe « sur ». Certains de ces gestionnaires ne prennent pas d'arguments, tandis que d'autres prennent plusieurs.Certains ont également un type de retour autre qu' void.Les gestionnaires par défaut pour tous les messages de WM_ sont documentés dans MFC Reference comme les fonctions membres de la classe CWnd dont les noms commencent par « sur ». Les déclarations de fonction membre dans CWnd sont préfixées avec afx_msg.

Voir aussi

Concepts

Déclarer des fonctions gestionnaires de messages