Macro della mappa messaggi (MFC)
Per supportare le mappe dei messaggi, MFC fornisce le macro seguenti:
Macro di dichiarazione e demarcazione di Message-Map
Nome | Descrizione |
---|---|
DECLARE_MESSAGE_MAP |
Dichiara che una mappa messaggi verrà usata in una classe per eseguire il mapping dei messaggi alle funzioni (deve essere usata nella dichiarazione di classe). |
BEGIN_MESSAGE_MAP |
Inizia la definizione di una mappa messaggi (deve essere usata nell'implementazione della classe). |
BEGIN_TEMPLATE_MESSAGE_MAP |
Inizia la definizione di una mappa messaggi in un tipo di classe contenente un singolo argomento modello. |
END_MESSAGE_MAP |
Termina la definizione di una mappa messaggi (deve essere usata nell'implementazione della classe). |
Macro di mapping dei messaggi
Nome | Descrizione |
---|---|
ON_COMMAND |
Indica quale funzione gestirà un messaggio di comando specificato. |
ON_COMMAND_EX |
Indica quale funzione gestirà un messaggio di comando specificato. |
ON_CONTROL |
Indica quale funzione gestirà un messaggio di notifica del controllo specificato. |
ON_MESSAGE |
Indica quale funzione gestirà un messaggio definito dall'utente. |
ON_OLECMD |
Indica quale funzione gestirà un comando di menu da un DocObject o dal relativo contenitore. |
ON_REGISTERED_MESSAGE |
Indica quale funzione gestirà un messaggio registrato definito dall'utente. |
ON_REGISTERED_THREAD_MESSAGE |
Indica quale funzione gestirà un messaggio registrato definito dall'utente quando si dispone di una CWinThread classe. |
ON_THREAD_MESSAGE |
Indica quale funzione gestirà un messaggio definito dall'utente quando si dispone di una CWinThread classe . |
ON_UPDATE_COMMAND_UI |
Indica quale funzione gestirà un messaggio di comando di aggiornamento dell'interfaccia utente specificato. |
Macro dell'intervallo di mappe messaggi
Nome | Descrizione |
---|---|
ON_COMMAND_RANGE |
Indica quale funzione gestirà l'intervallo di ID comando specificati nei primi due parametri della macro. |
ON_UPDATE_COMMAND_UI_RANGE |
Indica quale gestore di aggiornamento gestirà l'intervallo di ID comando specificati nei primi due parametri della macro. |
ON_CONTROL_RANGE |
Indica quale funzione gestirà le notifiche dall'intervallo di ID di controllo specificati nel secondo e nel terzo parametro alla macro. Il primo parametro è un messaggio di notifica del controllo, ad esempio BN_CLICKED . |
Per altre informazioni sulle mappe dei messaggi, sulle macro di dichiarazione e demarcazione di message map e sulle macro di mapping dei messaggi, vedere Message Maps and Message Handling and Mapping Topics. Per altre informazioni sugli intervalli di mappe messaggi, vedere Gestori per intervalli di mappe messaggi.
BEGIN_MESSAGE_MAP
Inizia la definizione della mappa messaggi.
Sintassi
BEGIN_MESSAGE_MAP( theClass, baseClass )
Parametri
theClass
Specifica il nome della classe il cui mapping dei messaggi è.
baseClass
Specifica il nome della classe base di theClass
.
Osservazioni:
Nel file di implementazione (.cpp) che definisce le funzioni membro per la classe, avviare la mappa dei messaggi con la BEGIN_MESSAGE_MAP
macro, quindi aggiungere voci di macro per ognuna delle funzioni del gestore di messaggi e completare la mappa dei messaggi con la END_MESSAGE_MAP
macro.
Per altre informazioni sulle mappe messaggi, vedere Mappe messaggi
Esempio
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
Requisiti
Intestazione: afxwin.h
BEGIN_TEMPLATE_MESSAGE_MAP
Inizia la definizione di una mappa messaggi in un tipo di classe contenente un singolo argomento modello.
Sintassi
BEGIN_TEMPLATE_MESSAGE_MAP( theClass, type_name, baseClass )
Parametri
theClass
Specifica il nome della classe il cui mapping dei messaggi è.
type_name
Nome del parametro del modello specificato per la classe .
baseClass
Specifica il nome della classe base di theClass
.
Osservazioni:
Questa macro è simile alla BEGIN_MESSAGE_MAP
macro, ma questa macro è destinata alle classi contenenti un singolo argomento di modello.
Nella sezione relativa all'implementazione del metodo della classe avviare la mappa dei messaggi con la BEGIN_TEMPLATE_MESSAGE_MAP
macro, quindi aggiungere voci di macro per ogni metodo del gestore di messaggi come si farebbe per una mappa messaggi standard. Come per la BEGIN_MESSAGE_MAP
macro, completare la mappa dei messaggi del modello con la END_MESSAGE_MAP
macro.
Per altre informazioni sull'implementazione delle mappe messaggi per le classi modello, vedere Procedura: Creare una mappa messaggi per una classe modello.
Requisiti
Intestazione: afxwin.h
DECLARE_MESSAGE_MAP
Dichiara che la classe definisce una mappa messaggi. Ogni CCmdTarget
classe derivata dal programma deve fornire una mappa messaggi per gestire i messaggi.
Sintassi
DECLARE_MESSAGE_MAP( )
Osservazioni:
Usare la DECLARE_MESSAGE_MAP
macro alla fine della dichiarazione di classe. Quindi, nel file di .cpp che definisce le funzioni membro per la classe , utilizzare la BEGIN_MESSAGE_MAP
macro, le voci di macro per ognuna delle funzioni del gestore di messaggi e la END_MESSAGE_MAP
macro.
Nota
Se si dichiara un membro dopo DECLARE_MESSAGE_MAP
, è necessario specificare un nuovo tipo di accesso (public
, private
o protected
) per tali membri.
Per altre informazioni sulle mappe messaggi e sulla DECLARE_MESSAGE_MAP
macro, vedere Argomenti relativi alla gestione e al mapping dei messaggi.
Esempio
class CMainFrame : public CMDIFrameWnd
{
DECLARE_MESSAGE_MAP()
// Remainder of class declaration omitted.
Requisiti
Intestazione: afxwin.h
END_MESSAGE_MAP
Termina la definizione della mappa messaggi.
Sintassi
END_MESSAGE_MAP( )
Osservazioni:
Per altre informazioni sulle mappe messaggi e sulla END_MESSAGE_MAP
macro, vedere Argomenti relativi alla gestione e al mapping dei messaggi.
Requisiti
Intestazione: afxwin.h
ON_COMMAND
Questa macro esegue il mapping di un messaggio di comando a una funzione membro.
Sintassi
ON_COMMAND( commandId, memberFxn )
Parametri
commandId
ID di comando.
memberFxn
Nome della funzione del gestore messaggi a cui viene eseguito il mapping del comando.
Osservazioni:
Indica quale funzione gestirà un messaggio di comando da un oggetto dell'interfaccia utente del comando, ad esempio una voce di menu o un pulsante della barra degli strumenti.
Quando un oggetto di destinazione del comando riceve un messaggio di Windows WM_COMMAND
con l'ID specificato, ON_COMMAND
chiamerà la funzione memberFxn
membro per gestire il messaggio.
Usare ON_COMMAND
per eseguire il mapping di un singolo comando a una funzione membro. Usare ON_COMMAND_RANGE
per eseguire il mapping di un intervallo di ID comando a una funzione membro. Una sola voce della mappa messaggi può corrispondere a un ID di comando specificato. Ovvero, non è possibile eseguire il mapping di un comando a più di un gestore. Per altre informazioni ed esempi, vedere Argomenti relativi alla gestione e al mapping dei messaggi.
Esempio
BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()
Requisiti
Intestazione: afxmsg_.h
ON_COMMAND_EX
Funzione membro del gestore comandi estesa.
Sintassi
ON_COMMAND_EX(commandId, memberFxn);
Parametri
commandId
ID di comando.
memberFxn
Nome della funzione del gestore messaggi a cui viene eseguito il mapping del comando.
Osservazioni:
È disponibile una forma estesa di gestori di messaggi di comando per usi avanzati. La ON_COMMAND_EX
macro viene usata per tali gestori di messaggi e fornisce un superset delle ON_COMMAND
funzionalità. Le funzioni membro del gestore comandi estese accettano un singolo parametro, un UINT
contenente l'ID comando e restituiscono un oggetto BOOL
. Il valore restituito deve essere TRUE
per indicare che il comando è stato gestito. In caso contrario, il routing continuerà ad altri oggetti di destinazione del comando.
Per altre informazioni, vedere Nota tecnica [TN006: Mappe messaggi]tm006-message-maps.md).
Requisiti
File di intestazione: afxmsg_.h
ON_CONTROL
Indica quale funzione gestirà un messaggio di notifica di controllo personalizzato.
Sintassi
ON_CONTROL( wNotifyCode, commandId, memberFxn )
Parametri
wNotifyCode
Codice di notifica del controllo.
commandId
ID di comando.
memberFxn
Nome della funzione del gestore messaggi a cui viene eseguito il mapping del comando.
Osservazioni:
I messaggi di notifica di controllo sono quelli inviati da un controllo alla relativa finestra padre.
Nella mappa dei messaggi deve essere presente esattamente un'istruzione ON_CONTROL
macro per ogni messaggio di notifica del controllo di cui è necessario eseguire il mapping a una funzione del gestore di messaggi.
Per altre informazioni ed esempi, vedere Argomenti relativi alla gestione e al mapping dei messaggi.
Requisiti
Intestazione: afxmsg_.h
ON_MESSAGE
Indica quale funzione gestirà un messaggio definito dall'utente.
Sintassi
ON_MESSAGE( message, memberFxn )
Parametri
message
ID del messaggio.
memberFxn
Nome della funzione del gestore messaggi a cui viene eseguito il mapping del messaggio.
Il tipo della funzione deve essere afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)
.
Osservazioni:
I messaggi definiti dall'utente sono messaggi non standard di Windows WM_MESSAGE
. Quando si seleziona un ID messaggio, è necessario usare valori compresi nell'intervallo di WM_USER
(0x0400) per 0x7FFF o WM_APP
(0x8000) per 0xBFFF. Per altre informazioni sugli ID messaggio, vedere WM_APP
.
Nella mappa dei messaggi deve essere presente esattamente un'istruzione ON_MESSAGE
macro per ogni messaggio definito dall'utente di cui è necessario eseguire il mapping a una funzione del gestore di messaggi.
Nota
Oltre ai messaggi definiti dall'utente, ON_MESSAGE
gestisce messaggi Windows meno comuni. Per altre informazioni, vedere Mappe messaggi.
Per altre informazioni ed esempi, vedere Argomenti relativi alla gestione e al mapping dei messaggi e gestori definiti dall'utente
Esempio
#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;
}
Requisiti
Intestazione: afxmsg_.h
ON_OLECMD
Indirizza i comandi tramite l'interfaccia IOleCommandTarget
dispatch del comando .
Sintassi
ON_OLECMD( pguid, olecmdid, commandId )
Parametri
pguid
Identificatore del gruppo di comandi a cui appartiene il comando. Usare NULL
per il gruppo standard.
olecmdid
Identificatore del comando OLE.
commandId
ID del menu, ID barra degli strumenti, ID pulsante o altro ID della risorsa o dell'oggetto che esegue il comando.
Osservazioni:
IOleCommandTarget
consente a un contenitore di ricevere i comandi che hanno origine nell'interfaccia utente di un DocObject e consente al contenitore di inviare gli stessi comandi (ad esempio New, Open, SaveAs e Print dal menu File e Copy, Paste, Undo e così via nel menu Modifica) a un DocObject.
IOleCommandTarget
è più semplice di OLE Automation's IDispatch
. IOleCommandTarget
si basa interamente su un set standard di comandi che raramente hanno argomenti e non sono coinvolte informazioni sul tipo (la sicurezza dei tipi è diminuita anche per gli argomenti di comando). Se è necessario inviare comandi con argomenti, usare COleServerDoc::OnExecOleCmd
.
I IOleCommandTarget
comandi di menu standard sono stati implementati da MFC nelle macro seguenti:
ON_OLECMD_CLEARSELECTION( )
Invia il comando Modifica cancella. Implementato come:
ON_OLECMD(NULL, OLECMDID_CLEARSELECTION, ID_EDIT_CLEAR)
ON_OLECMD_COPY( )
Invia il comando Modifica copia. Implementato come:
ON_OLECMD(NULL, OLECMDID_COPY, ID_EDIT_COPY)
ON_OLECMD_CUT( )
Invia il comando Modifica taglia. Implementato come:
ON_OLECMD(NULL, OLECMDID_CUT, ID_EDIT_CUT)
ON_OLECMD_NEW( )
Invia il comando File Nuovo. Implementato come:
ON_OLECMD(NULL, OLECMDID_NEW, ID_FILE_NEW)
ON_OLECMD_OPEN( )
Invia il comando Apri file. Implementato come:
ON_OLECMD(NULL, OLECMDID_OPEN, ID_FILE_OPEN)
ON_OLECMD_PAGESETUP( )
Invia il comando Imposta pagina file. Implementato come:
ON_OLECMD(NULL, OLECMDID_PAGESETUP, ID_FILE_PAGE_SETUP)
ON_OLECMD_PASTE( )
Invia il comando Modifica incolla. Implementato come:
ON_OLECMD(NULL, OLECMDID_PASTE, ID_EDIT_PASTE)
ON_OLECMD_PASTESPECIAL( )
Invia il comando Modifica incolla speciale. Implementato come:
ON_OLECMD(NULL, OLECMDID_PASTESPECIAL, ID_EDIT_PASTE_SPECIAL)
ON_OLECMD_PRINT( )
Invia il comando Stampa file. Implementato come:
ON_OLECMD(NULL, OLECMDID_PRINT, ID_FILE_PRINT)
ON_OLECMD_PRINTPREVIEW( )
Invia il comando Anteprima stampa file. Implementato come:
ON_OLECMD(NULL, OLECMDID_PRINTPREVIEW, ID_FILE_PRINT_PREVIEW)
ON_OLECMD_REDO( )
Invia il comando Modifica rollforward. Implementato come:
ON_OLECMD(NULL, OLECMDID_REDO, ID_EDIT_REDO)
ON_OLECMD_SAVE( )
Invia il comando Salva file. Implementato come:
ON_OLECMD(NULL, OLECMDID_SAVE, ID_FILE_SAVE)
ON_OLECMD_SAVE_AS( )
Invia il comando Salva con nome file. Implementato come:
ON_OLECMD(NULL, OLECMDID_SAVEAS, ID_FILE_SAVE_AS)
ON_OLECMD_SAVE_COPY_AS( )
Invia il comando Salva copia con nome file. Implementato come:
ON_OLECMD(NULL, OLECMDID_SAVECOPYAS, ID_FILE_SAVE_COPY_AS)
ON_OLECMD_SELECTALL( )
Invia il comando Modifica seleziona tutto. Implementato come:
ON_OLECMD(NULL, OLECMDID_SELECTALL, ID_EDIT_SELECT_ALL)
ON_OLECMD_UNDO( )
Invia il comando Modifica annulla. Implementato come:
ON_OLECMD(NULL, OLECMDID_UNDO, ID_EDIT_UNDO)
Requisiti
Intestazione: afxdocob.h
ON_REGISTERED_MESSAGE
La funzione Windows RegisterWindowMessage
viene usata per definire un nuovo messaggio di finestra che è garantito che sia univoco in tutto il sistema.
Sintassi
ON_REGISTERED_MESSAGE( nMessageVariable, memberFxn )
Parametri
nMessageVariable
Variabile ID messaggio finestra registrata.
memberFxn
Nome della funzione del gestore messaggi a cui viene eseguito il mapping del messaggio.
Osservazioni:
Questa macro indica quale funzione gestirà il messaggio registrato.
Per altre informazioni ed esempi, vedere Argomenti relativi alla gestione e al mapping dei messaggi.
Esempio
static UINT NEAR WM_FIND = RegisterWindowMessage(_T("COMMDLG_FIND"));
BEGIN_MESSAGE_MAP(CMyWnd3, CWnd)
ON_REGISTERED_MESSAGE(WM_FIND, OnFind)
END_MESSAGE_MAP()
Requisiti
Intestazione: afxmsg_.h
ON_REGISTERED_THREAD_MESSAGE
Indica quale funzione gestirà il messaggio registrato dalla funzione Windows RegisterWindowMessage
.
Sintassi
ON_REGISTERED_THREAD_MESSAGE(nMessageVariable, memberFxn )
Parametri
nMessageVariable
Variabile ID messaggio finestra registrata.
memberFxn
Nome della CWinThread
funzione -message-handler a cui viene eseguito il mapping del messaggio.
Osservazioni:
RegisterWindowMessage
viene usato per definire un nuovo messaggio di finestra che è garantito essere univoco in tutto il sistema. ON_REGISTERED_THREAD_MESSAGE
deve essere usato invece di quando si dispone di ON_REGISTERED_MESSAGE
una CWinThread
classe .
Requisiti
Intestazione: afxmsg_.h
ON_THREAD_MESSAGE
Indica quale funzione gestirà un messaggio definito dall'utente.
Sintassi
ON_THREAD_MESSAGE( message, memberFxn )
Parametri
message
ID del messaggio.
memberFxn
Nome della CWinThread
funzione -message-handler a cui viene eseguito il mapping del messaggio.
Osservazioni:
ON_THREAD_MESSAGE
deve essere usato invece di quando si dispone di ON_MESSAGE
una CWinThread
classe . I messaggi definiti dall'utente sono messaggi non standard di Windows WM_MESSAGE
. Nella mappa dei messaggi deve essere presente esattamente un'istruzione ON_THREAD_MESSAGE
macro per ogni messaggio definito dall'utente di cui è necessario eseguire il mapping a una funzione del gestore di messaggi.
Requisiti
Intestazione: afxole.h
ON_UPDATE_COMMAND_UI
Questa macro indica quale funzione gestirà un messaggio di comando di aggiornamento dell'interfaccia utente.
Sintassi
ON_UPDATE_COMMAND_UI( messageId, memberFxn )
Parametri
messageId
ID del messaggio.
memberFxn
Nome della funzione del gestore messaggi a cui viene eseguito il mapping del messaggio.
Osservazioni:
Nella mappa dei messaggi deve essere presente esattamente un'istruzione ON_UPDATE_COMMAND_UI
macro per ogni comando di aggiornamento dell'interfaccia utente di cui è necessario eseguire il mapping a una funzione del gestore di messaggi.
Per altre informazioni ed esempi, vedere Argomenti relativi alla gestione e al mapping dei messaggi.
Requisiti
Intestazione: afxole.h
ON_COMMAND_RANGE
Utilizzare questa macro per eseguire il mapping di un intervallo contiguo di ID comando a una singola funzione del gestore di messaggi.
Sintassi
ON_COMMAND_RANGE( id1, id2, memberFxn )
Parametri
id1
ID comando all'inizio di un intervallo contiguo di ID comando.
id2
ID comando alla fine di un intervallo contiguo di ID comando.
memberFxn
Nome della funzione del gestore messaggi a cui vengono mappati i comandi.
Osservazioni:
L'intervallo di ID inizia con e termina con id1
id2
.
Usare ON_COMMAND_RANGE
per eseguire il mapping di un intervallo di ID comando a una funzione membro. Usare ON_COMMAND
per eseguire il mapping di un singolo comando a una funzione membro. Una sola voce della mappa messaggi può corrispondere a un ID di comando specificato. Ovvero, non è possibile eseguire il mapping di un comando a più di un gestore. Per altre informazioni sul mapping degli intervalli di messaggi, vedere Gestori per intervalli di mappe messaggi.
Non è disponibile alcun supporto automatico per gli intervalli di mappe messaggi, pertanto è necessario posizionare manualmente la macro.
Esempio
// 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);
}
Requisiti
Intestazione: afxmsg_.h
ON_UPDATE_COMMAND_UI_RANGE
Esegue il mapping di un intervallo contiguo di ID comando a una singola funzione del gestore messaggi di aggiornamento.
Sintassi
ON_UPDATE_COMMAND_UI_RANGE( id1, id2, memberFxn )
Parametri
id1
ID comando all'inizio di un intervallo contiguo di ID comando.
id2
ID comando alla fine di un intervallo contiguo di ID comando.
memberFxn
Nome della funzione del gestore di messaggi di aggiornamento a cui vengono mappati i comandi.
Osservazioni:
Aggiornare i gestori di messaggi aggiornano lo stato delle voci di menu e dei pulsanti della barra degli strumenti associati al comando. L'intervallo di ID inizia con e termina con id1
id2
.
Non è disponibile alcun supporto automatico per gli intervalli di mappe messaggi, pertanto è necessario posizionare manualmente la macro.
Requisiti
Intestazione: afxmsg_.h
ON_CONTROL_RANGE
Utilizzare questa macro per eseguire il mapping di un intervallo contiguo di ID di controllo a una singola funzione del gestore di messaggi per un messaggio di notifica di Windows specificato, ad esempio BN_CLICKED
.
Sintassi
ON_CONTROL_RANGE( wNotifyCode, id1, id2, memberFxn )
Parametri
wNotifyCode
Codice di notifica a cui risponde il gestore.
id1
ID comando all'inizio di un intervallo contiguo di ID di controllo.
id2
ID comando alla fine di un intervallo contiguo di ID di controllo.
memberFxn
Nome della funzione del gestore messaggi a cui vengono mappati i controlli.
Osservazioni:
L'intervallo di ID inizia con e termina con id1
id2
. Il gestore viene chiamato per la notifica specificata proveniente da uno dei controlli mappati.
Non è disponibile alcun supporto automatico per gli intervalli di mappe messaggi, pertanto è necessario posizionare manualmente la macro.
Per altre informazioni sull'implementazione delle funzioni del gestore per un intervallo di ID di controllo, vedere Gestori per intervalli di mapping messaggi.
Requisiti
Intestazione: afxmsg_.h
Vedi anche
ON_COMMAND
TN006: mappe messaggi
COleCmdUI
Classe
COleServerDoc::OnExecOleCmd
RegisterWindowMessage
Gestori definiti dall'utente
CCmdUI
Classe