Macros de table des messages (MFC)
Pour prendre en charge les mappages de messages, MFC fournit les macros suivantes :
Macros de déclaration et de démarcation de carte de message
Nom | Description |
---|---|
DECLARE_MESSAGE_MAP |
Déclare qu’un mappage de messages sera utilisé dans une classe pour mapper les messages aux fonctions (doit être utilisé dans la déclaration de classe). |
BEGIN_MESSAGE_MAP |
Commence la définition d’un mappage de messages (doit être utilisée dans l’implémentation de classe). |
BEGIN_TEMPLATE_MESSAGE_MAP |
Commence la définition d’un mappage de messages sur un type de classe contenant un seul argument de modèle. |
END_MESSAGE_MAP |
Termine la définition d’un mappage de messages (doit être utilisée dans l’implémentation de classe). |
Macros de mappage de messages
Nom | Description |
---|---|
ON_COMMAND |
Indique la fonction qui gère un message de commande spécifié. |
ON_COMMAND_EX |
Indique la fonction qui gère un message de commande spécifié. |
ON_CONTROL |
Indique quelle fonction gère un message de notification de contrôle spécifié. |
ON_MESSAGE |
Indique la fonction qui gère un message défini par l’utilisateur. |
ON_OLECMD |
Indique quelle fonction gère une commande de menu à partir d’un DocObject ou de son conteneur. |
ON_REGISTERED_MESSAGE |
Indique quelle fonction gère un message défini par l’utilisateur inscrit. |
ON_REGISTERED_THREAD_MESSAGE |
Indique la fonction qui gère un message défini par l’utilisateur inscrit lorsque vous disposez d’une CWinThread classe. |
ON_THREAD_MESSAGE |
Indique la fonction qui gère un message défini par l’utilisateur lorsque vous disposez d’une CWinThread classe. |
ON_UPDATE_COMMAND_UI |
Indique quelle fonction gère un message de commande de mise à jour de l’interface utilisateur spécifié. |
Macros de plage de mappages de messages
Nom | Description |
---|---|
ON_COMMAND_RANGE |
Indique la fonction qui gère la plage d’ID de commandes spécifiée dans les deux premiers paramètres de la macro. |
ON_UPDATE_COMMAND_UI_RANGE |
Indique quel gestionnaire de mise à jour gère la plage d’ID de commande spécifié dans les deux premiers paramètres de la macro. |
ON_CONTROL_RANGE |
Indique quelle fonction gère les notifications de la plage d’ID de contrôle spécifiées dans les deuxième et troisième paramètres de la macro. Le premier paramètre est un message de notification de contrôle, tel que BN_CLICKED . |
Pour plus d’informations sur les mappages de messages, les macros de déclaration et de démarcation des messages, ainsi que les macros de mappage de messages, consultez Les rubriques de gestion des messages et de gestion des messages. Pour plus d’informations sur les plages de mappage de messages, consultez Gestionnaires pour les plages de mappage de messages.
BEGIN_MESSAGE_MAP
Commence la définition de votre carte de messages.
Syntaxe
BEGIN_MESSAGE_MAP( theClass, baseClass )
Paramètres
theClass
Spécifie le nom de la classe dont le mappage de messages est celui-ci.
baseClass
Spécifie le nom de la classe de base de theClass
.
Notes
Dans le fichier d’implémentation (.cpp) qui définit les fonctions membres de votre classe, démarrez le mappage de messages avec la BEGIN_MESSAGE_MAP
macro, puis ajoutez des entrées de macro pour chacune de vos fonctions de gestionnaire de messages et terminez la carte des messages avec la END_MESSAGE_MAP
macro.
Pour plus d’informations sur les mappages de messages, consultez Cartes de messages
Exemple
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
Spécifications
En-tête : afxwin.h
BEGIN_TEMPLATE_MESSAGE_MAP
Commence la définition d’un mappage de messages sur un type de classe contenant un seul argument de modèle.
Syntaxe
BEGIN_TEMPLATE_MESSAGE_MAP( theClass, type_name, baseClass )
Paramètres
theClass
Spécifie le nom de la classe dont le mappage de messages est celui-ci.
type_name
Nom du paramètre de modèle spécifié pour la classe.
baseClass
Spécifie le nom de la classe de base de theClass
.
Notes
Cette macro est similaire à la BEGIN_MESSAGE_MAP
macro. Toutefois, cette macro est destinée aux classes contenant un seul argument de modèle.
Dans la section implémentation de méthode de votre classe, démarrez le mappage de messages avec la BEGIN_TEMPLATE_MESSAGE_MAP
macro, puis ajoutez des entrées de macro pour chacune de vos méthodes de gestionnaire de messages comme vous le feriez pour une carte de messages standard. Comme avec la BEGIN_MESSAGE_MAP
macro, complétez le mappage de messages de modèle avec la END_MESSAGE_MAP
macro.
Pour plus d’informations sur l’implémentation de mappages de messages pour les classes de modèle, reportez-vous à How to : Create a Message Map for a Template Class.
Spécifications
En-tête : afxwin.h
DECLARE_MESSAGE_MAP
Déclare que la classe définit une carte de messages. Chaque CCmdTarget
classe dérivée de votre programme doit fournir un mappage de messages pour gérer les messages.
Syntaxe
DECLARE_MESSAGE_MAP( )
Notes
Utilisez la DECLARE_MESSAGE_MAP
macro à la fin de votre déclaration de classe. Ensuite, dans le fichier .cpp qui définit les fonctions membres de la classe, utilisez la BEGIN_MESSAGE_MAP
macro, les entrées de macro pour chacune de vos fonctions de gestionnaire de messages et la END_MESSAGE_MAP
macro.
Remarque
Si vous déclarez un membre après DECLARE_MESSAGE_MAP
, vous devez spécifier un nouveau type d’accès (public
, private
ou protected
) pour ceux-ci.
Pour plus d’informations sur les mappages de messages et la macro, consultez Rubriques relatives à la DECLARE_MESSAGE_MAP
gestion des messages et au mappage.
Exemple
class CMainFrame : public CMDIFrameWnd
{
DECLARE_MESSAGE_MAP()
// Remainder of class declaration omitted.
Spécifications
En-tête : afxwin.h
END_MESSAGE_MAP
Termine la définition de votre carte de messages.
Syntaxe
END_MESSAGE_MAP( )
Notes
Pour plus d’informations sur les mappages de messages et la macro, consultez Rubriques relatives à la END_MESSAGE_MAP
gestion des messages et au mappage.
Spécifications
En-tête : afxwin.h
ON_COMMAND
Cette macro mappe un message de commande à une fonction membre.
Syntaxe
ON_COMMAND( commandId, memberFxn )
Paramètres
commandId
ID de la commande.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle la commande est mappée.
Notes
Elle indique quelle fonction gère un message de commande à partir d’un objet d’interface utilisateur de commande, tel qu’un élément de menu ou un bouton de barre d’outils.
Lorsqu’un objet cible de commande reçoit un message Windows WM_COMMAND
avec l’ID spécifié, ON_COMMAND
appelle la fonction memberFxn
membre pour gérer le message.
Permet ON_COMMAND
de mapper une seule commande à une fonction membre. Permet ON_COMMAND_RANGE
de mapper une plage d’ID de commandes à une fonction membre. Une seule entrée de carte de messages peut correspondre à un ID de commande donné. Autrement dit, vous ne pouvez pas mapper une commande à plusieurs gestionnaires. Pour plus d’informations et d’exemples, consultez Rubriques relatives à la gestion des messages et au mappage.
Exemple
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()
Spécifications
En-tête : afxmsg_.h
ON_COMMAND_EX
Fonction membre du gestionnaire de commandes étendue.
Syntaxe
ON_COMMAND_EX(commandId, memberFxn);
Paramètres
commandId
ID de la commande.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle la commande est mappée.
Notes
Une forme étendue de gestionnaires de messages de commande est disponible pour les utilisations avancées. La ON_COMMAND_EX
macro est utilisée pour ces gestionnaires de messages et fournit un super-ensemble de fonctionnalités ON_COMMAND
. Les fonctions membres du gestionnaire de commandes étendues prennent un paramètre unique, un UINT
ID de commande contenant l’ID de commande et retournent un BOOL
. La valeur de retour doit indiquer TRUE
que la commande a été gérée ; sinon, le routage continuera vers d’autres objets cibles de commande.
Pour plus d’informations, consultez la note technique [TN006 : Message Maps]tm006-message-maps.md).
Spécifications
Fichier d’en-tête : afxmsg_.h
ON_CONTROL
Indique quelle fonction gère un message de notification de contrôle personnalisé.
Syntaxe
ON_CONTROL( wNotifyCode, commandId, memberFxn )
Paramètres
wNotifyCode
Code de notification du contrôle.
commandId
ID de la commande.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle la commande est mappée.
Notes
Les messages de notification de contrôle sont ceux envoyés d’un contrôle à sa fenêtre parente.
Il doit y avoir exactement une ON_CONTROL
instruction macro dans votre mappage de messages pour chaque message de notification de contrôle qui doit être mappé à une fonction de gestionnaire de messages.
Pour plus d’informations et d’exemples, consultez Rubriques relatives à la gestion des messages et au mappage.
Spécifications
En-tête : afxmsg_.h
ON_MESSAGE
Indique la fonction qui gère un message défini par l’utilisateur.
Syntaxe
ON_MESSAGE( message, memberFxn )
Paramètres
message
ID de message.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle le message est mappé.
Le type de la fonction doit être afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)
.
Notes
Les messages définis par l’utilisateur sont tous les messages qui ne sont pas des messages Windows WM_MESSAGE
standard. Lorsque vous sélectionnez un ID de message, vous devez utiliser des valeurs dans la plage de WM_USER
(0x0400) pour 0x7FFF ou WM_APP
(0x8000) pour 0xBFFF. Pour plus d’informations sur les ID de message, consultez WM_APP
.
Il doit y avoir exactement une ON_MESSAGE
instruction macro dans votre mappage de messages pour chaque message défini par l’utilisateur qui doit être mappé à une fonction de gestionnaire de messages.
Remarque
Outre les messages définis par l’utilisateur, ON_MESSAGE
gère les messages Windows moins courants. Pour plus d’informations, consultez Messages Maps.
Pour plus d’informations et d’exemples, consultez rubriques de gestion et de mappage des messages et gestionnaires définis par l’utilisateur
Exemple
#define WM_MYMESSAGE (WM_USER + 100)
BEGIN_MESSAGE_MAP(CMyWnd2, CWnd)
ON_MESSAGE(WM_MYMESSAGE, OnMyMessage)
END_MESSAGE_MAP()
// inside the class declaration
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
LRESULT CMyWnd2::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(lParam);
// Handle message here.
return 0;
}
Spécifications
En-tête : afxmsg_.h
ON_OLECMD
Route les commandes via l’interface IOleCommandTarget
de distribution de commandes .
Syntaxe
ON_OLECMD( pguid, olecmdid, commandId )
Paramètres
pguid
Identificateur du groupe de commandes auquel appartient la commande. Utiliser NULL
pour le groupe standard.
olecmdid
Identificateur de la commande OLE.
commandId
ID de menu, ID de barre d’outils, ID de bouton ou autre ID de la ressource ou de l’objet qui émet la commande.
Notes
IOleCommandTarget
permet à un conteneur de recevoir des commandes qui proviennent de l’interface utilisateur d’un DocObject et permet au conteneur d’envoyer les mêmes commandes (par exemple, New, Open, SaveAs et Print on the File menu ; and Copy, Paste, Undo, etc. dans le menu Modifier) à un DocObject.
IOleCommandTarget
est plus simple que ole Automation.IDispatch
IOleCommandTarget
s’appuie entièrement sur un ensemble standard de commandes qui ont rarement des arguments et aucune information de type n’est impliquée (la sécurité du type est également réduite pour les arguments de commande). Si vous avez besoin de distribuer des commandes avec des arguments, utilisez COleServerDoc::OnExecOleCmd
.
Les IOleCommandTarget
commandes de menu standard ont été implémentées par MFC dans les macros suivantes :
ON_OLECMD_CLEARSELECTION( )
Répartit la commande Modifier l’effacement. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_CLEARSELECTION, ID_EDIT_CLEAR)
ON_OLECMD_COPY( )
Répartit la commande Modifier la copie. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_COPY, ID_EDIT_COPY)
ON_OLECMD_CUT( )
Répartit la commande Modifier la coupe. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_CUT, ID_EDIT_CUT)
ON_OLECMD_NEW( )
Répartit la commande File New. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_NEW, ID_FILE_NEW)
ON_OLECMD_OPEN( )
Répartit la commande Ouvrir le fichier. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_OPEN, ID_FILE_OPEN)
ON_OLECMD_PAGESETUP( )
Répartit la commande Configuration de la page de fichiers. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_PAGESETUP, ID_FILE_PAGE_SETUP)
ON_OLECMD_PASTE( )
Répartit la commande Modifier le collage. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_PASTE, ID_EDIT_PASTE)
ON_OLECMD_PASTESPECIAL( )
Répartit la commande Modifier le collage spécial. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_PASTESPECIAL, ID_EDIT_PASTE_SPECIAL)
ON_OLECMD_PRINT( )
Répartit la commande Imprimer des fichiers. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_PRINT, ID_FILE_PRINT)
ON_OLECMD_PRINTPREVIEW( )
Répartit la commande Aperçu avant impression de fichier. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_PRINTPREVIEW, ID_FILE_PRINT_PREVIEW)
ON_OLECMD_REDO( )
Répartit la commande Modifier le rétablissement. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_REDO, ID_EDIT_REDO)
ON_OLECMD_SAVE( )
Répartit la commande Enregistrer des fichiers. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_SAVE, ID_FILE_SAVE)
ON_OLECMD_SAVE_AS( )
Répartit la commande Enregistrer sous du fichier. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_SAVEAS, ID_FILE_SAVE_AS)
ON_OLECMD_SAVE_COPY_AS( )
Répartit la commande Enregistrer le fichier sous. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_SAVECOPYAS, ID_FILE_SAVE_COPY_AS)
ON_OLECMD_SELECTALL( )
Répartit la commande Modifier sélectionner tout. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_SELECTALL, ID_EDIT_SELECT_ALL)
ON_OLECMD_UNDO( )
Répartit la commande Modifier l’annulation. Implémenté comme suit :
ON_OLECMD(NULL, OLECMDID_UNDO, ID_EDIT_UNDO)
Spécifications
En-tête : afxdocob.h
ON_REGISTERED_MESSAGE
La fonction Windows RegisterWindowMessage
est utilisée pour définir un nouveau message de fenêtre qui est garanti être unique dans tout le système.
Syntaxe
ON_REGISTERED_MESSAGE( nMessageVariable, memberFxn )
Paramètres
nMessageVariable
Variable d’ID de message de fenêtre inscrite.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle le message est mappé.
Notes
Cette macro indique la fonction qui gère le message inscrit.
Pour plus d’informations et d’exemples, consultez Rubriques relatives à la gestion des messages et au mappage.
Exemple
static UINT NEAR WM_FIND = RegisterWindowMessage(_T("COMMDLG_FIND"));
BEGIN_MESSAGE_MAP(CMyWnd3, CWnd)
ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
END_MESSAGE_MAP()
Spécifications
En-tête : afxmsg_.h
ON_REGISTERED_THREAD_MESSAGE
Indique la fonction qui gère le message inscrit par la fonction Windows RegisterWindowMessage
.
Syntaxe
ON_REGISTERED_THREAD_MESSAGE(nMessageVariable, memberFxn )
Paramètres
nMessageVariable
Variable d’ID de message de fenêtre inscrite.
memberFxn
Nom de la CWinThread
fonction -message-handler à laquelle le message est mappé.
Notes
RegisterWindowMessage
est utilisé pour définir un nouveau message de fenêtre qui est garanti être unique dans tout le système. ON_REGISTERED_THREAD_MESSAGE
doit être utilisé au lieu de l’utilisation d’une ON_REGISTERED_MESSAGE
CWinThread
classe.
Spécifications
En-tête : afxmsg_.h
ON_THREAD_MESSAGE
Indique la fonction qui gère un message défini par l’utilisateur.
Syntaxe
ON_THREAD_MESSAGE( message, memberFxn )
Paramètres
message
ID de message.
memberFxn
Nom de la CWinThread
fonction -message-handler à laquelle le message est mappé.
Notes
ON_THREAD_MESSAGE
doit être utilisé au lieu de l’utilisation d’une ON_MESSAGE
CWinThread
classe. Les messages définis par l’utilisateur sont tous les messages qui ne sont pas des messages Windows WM_MESSAGE
standard. Il doit y avoir exactement une ON_THREAD_MESSAGE
instruction macro dans votre mappage de messages pour chaque message défini par l’utilisateur qui doit être mappé à une fonction de gestionnaire de messages.
Spécifications
En-tête : afxole.h
ON_UPDATE_COMMAND_UI
Cette macro indique la fonction qui gère un message de commande de mise à jour de l’interface utilisateur.
Syntaxe
ON_UPDATE_COMMAND_UI( messageId, memberFxn )
Paramètres
messageId
ID de message.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle le message est mappé.
Notes
Il doit y avoir exactement une ON_UPDATE_COMMAND_UI
instruction macro dans votre mappage de messages pour chaque commande de mise à jour de l’interface utilisateur qui doit être mappée à une fonction de gestionnaire de messages.
Pour plus d’informations et d’exemples, consultez Rubriques relatives à la gestion des messages et au mappage.
Spécifications
En-tête : afxole.h
ON_COMMAND_RANGE
Utilisez cette macro pour mapper une plage contiguë d’ID de commandes à une fonction de gestionnaire de messages unique.
Syntaxe
ON_COMMAND_RANGE( id1, id2, memberFxn )
Paramètres
id1
ID de commande au début d’une plage contiguë d’ID de commandes.
id2
ID de commande à la fin d’une plage contiguë d’ID de commandes.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle les commandes sont mappées.
Notes
La plage d’ID commence par id1
et se termine par id2
.
Permet ON_COMMAND_RANGE
de mapper une plage d’ID de commandes à une fonction membre. Permet ON_COMMAND
de mapper une seule commande à une fonction membre. Une seule entrée de carte de messages peut correspondre à un ID de commande donné. Autrement dit, vous ne pouvez pas mapper une commande à plusieurs gestionnaires. Pour plus d’informations sur le mappage des plages de messages, consultez Gestionnaires pour les plages de mappage de messages.
Il n’existe aucune prise en charge automatique des plages de mappage de messages. Vous devez donc placer la macro vous-même.
Exemple
// The code fragment below shows how to use ON_COMMAND_RANGE macro
// to map a contiguous range of command IDs to a single message
// handler function (i.e. OnRangeCmds() in the sample below). In
// addition, it also shows how to use CheckMenuRadioItem() to check a
// selected menu item and makes it a radio item.
BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
ON_COMMAND_RANGE(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3, &CChildFrame::OnRangeCmds)
END_MESSAGE_MAP()
void CChildFrame::OnRangeCmds(UINT nID)
{
CMenu* mmenu = AfxGetMainWnd()->GetMenu();
CMenu* submenu = mmenu->GetSubMenu(5);
submenu->CheckMenuRadioItem(ID_COMMAND_RANGECMD1, ID_COMMAND_RANGECMD3,
nID, MF_BYCOMMAND);
}
Spécifications
En-tête : afxmsg_.h
ON_UPDATE_COMMAND_UI_RANGE
Mappe une plage contiguë d’ID de commandes à une fonction de gestionnaire de messages de mise à jour unique.
Syntaxe
ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )
Paramètres
id1
ID de commande au début d’une plage contiguë d’ID de commandes.
id2
ID de commande à la fin d’une plage contiguë d’ID de commandes.
memberFxn
Nom de la fonction de gestionnaire de messages de mise à jour à laquelle les commandes sont mappées.
Notes
Les gestionnaires de messages de mise à jour mettent à jour l’état des éléments de menu et des boutons de barre d’outils associés à la commande. La plage d’ID commence par id1
et se termine par id2
.
Il n’existe aucune prise en charge automatique des plages de mappage de messages. Vous devez donc placer la macro vous-même.
Spécifications
En-tête : afxmsg_.h
ON_CONTROL_RANGE
Utilisez cette macro pour mapper une plage contiguë d’ID de contrôle à une fonction de gestionnaire de messages unique pour un message de notification Windows spécifié, tel que BN_CLICKED
.
Syntaxe
ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )
Paramètres
wNotifyCode
Code de notification auquel votre gestionnaire répond.
id1
ID de commande au début d’une plage contiguë d’ID de contrôle.
id2
ID de commande à la fin d’une plage contiguë d’ID de contrôle.
memberFxn
Nom de la fonction de gestionnaire de messages à laquelle les contrôles sont mappés.
Notes
La plage d’ID commence par id1
et se termine par id2
. Le gestionnaire est appelé pour la notification spécifiée provenant de l’un des contrôles mappés.
Il n’existe aucune prise en charge automatique des plages de mappage de messages. Vous devez donc placer la macro vous-même.
Pour plus d’informations sur l’implémentation de fonctions de gestionnaire pour une plage d’ID de contrôle, reportez-vous aux gestionnaires pour les plages de mappage de messages.
Spécifications
En-tête : afxmsg_.h
Voir aussi
ON_COMMAND
TN006 : tables des messages
COleCmdUI
Classe
COleServerDoc::OnExecOleCmd
RegisterWindowMessage
Gestionnaires définis par l’utilisateur
CCmdUI
Classe