Condividi tramite


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 CCmdTargetclasse 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, privateo 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 IOleCommandTargetdispatch 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 CWinThreadfunzione -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 CWinThreadfunzione -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