Macro della mappa messaggi (ATL)
Queste macro definiscono mappe messaggi e voci.
Nome | Descrizione |
---|---|
ALT_MSG_MAP | Contrassegna l'inizio di una mappa messaggi alternativa. |
BEGIN_MSG_MAP | Contrassegna l'inizio della mappa messaggi predefinita. |
CHAIN_MSG_MAP_ALT | Concatena a una mappa messaggi alternativa nella classe base. |
CHAIN_MSG_MAP_ALT_MEMBER | Concatena a una mappa messaggi alternativa in un membro dati della classe . |
CHAIN_MSG_MAP | Concatena la mappa messaggi predefinita nella classe base. |
CHAIN_MSG_MAP_DYNAMIC | Concatena la mappa dei messaggi in un'altra classe in fase di esecuzione. |
CHAIN_MSG_MAP_MEMBER | Concatena la mappa dei messaggi predefinita in un membro dati della classe . |
COMMAND_CODE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base al codice di notifica. |
COMMAND_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base al codice di notifica e all'identificatore della voce di menu, del controllo o dell'acceleratore. |
COMMAND_ID_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base all'identificatore della voce di menu, del controllo o dell'acceleratore. |
COMMAND_RANGE_CODE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base al codice di notifica e a un intervallo contiguo di identificatori di controllo. |
COMMAND_RANGE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base a un intervallo contiguo di identificatori di controllo. |
DECLARE_EMPTY_MSG_MAP | Implementa una mappa messaggi vuota. |
DEFAULT_REFLECTION_HANDLER | Fornisce un gestore predefinito per i messaggi riflessi che non vengono gestiti in caso contrario. |
END_MSG_MAP | Contrassegna la fine di una mappa messaggi. |
FORWARD_NOTIFICATIONS | Inoltra i messaggi di notifica alla finestra padre. |
MESSAGE_HANDLER | Esegue il mapping di un messaggio di Windows a una funzione del gestore. |
MESSAGE_RANGE_HANDLER | Esegue il mapping di un intervallo contiguo di messaggi di Windows a una funzione del gestore. |
NOTIFY_CODE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base al codice di notifica. |
NOTIFY_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base al codice di notifica e all'identificatore del controllo. |
NOTIFY_ID_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base all'identificatore del controllo. |
NOTIFY_RANGE_CODE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base al codice di notifica e a un intervallo contiguo di identificatori di controllo. |
NOTIFY_RANGE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base a un intervallo contiguo di identificatori di controllo. |
REFLECT_NOTIFICATIONS | Riflette i messaggi di notifica nella finestra che li ha inviati. |
REFLECTED_COMMAND_CODE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base al codice di notifica. |
REFLECTED_COMMAND_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base al codice di notifica e all'identificatore della voce di menu, del controllo o dell'acceleratore. |
REFLECTED_COMMAND_ID_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base all'identificatore della voce di menu, del controllo o dell'acceleratore. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base al codice di notifica e a un intervallo contiguo di identificatori di controllo. |
REFLECTED_COMMAND_RANGE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base a un intervallo contiguo di identificatori di controllo. |
REFLECTED_NOTIFY_CODE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base al codice di notifica. |
REFLECTED_NOTIFY_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base al codice di notifica e all'identificatore del controllo. |
REFLECTED_NOTIFY_ID_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base all'identificatore del controllo. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base al codice di notifica e a un intervallo contiguo di identificatori di controllo. |
REFLECTED_NOTIFY_RANGE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base a un intervallo contiguo di identificatori di controllo. |
Requisiti
Intestazione: atlwin.h
ALT_MSG_MAP
Contrassegna l'inizio di una mappa messaggi alternativa.
ALT_MSG_MAP(msgMapID)
Parametri
msgMapID
[in] Identificatore della mappa dei messaggi.
Osservazioni:
ATL identifica ogni mappa dei messaggi in base a un numero. La mappa dei messaggi predefinita (dichiarata con la macro BEGIN_MSG_MAP) è identificata da 0. Una mappa messaggi alternativa viene identificata da msgMapID.
Le mappe messaggi vengono usate per elaborare i messaggi inviati a una finestra. Ad esempio, CContainedWindow consente di specificare l'identificatore di una mappa messaggi nell'oggetto contenitore. CContainedWindow::WindowProc usa quindi questa mappa messaggi per indirizzare i messaggi della finestra contenuta alla funzione del gestore appropriata o a un'altra mappa dei messaggi. Per un elenco di macro che dichiarano funzioni del gestore, vedere BEGIN_MSG_MAP.
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe di messaggi alternative successive.
La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Si noti che esiste sempre esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Esempio
L'esempio seguente mostra la mappa dei messaggi predefinita e una mappa messaggi alternativa, ognuna contenente una funzione del gestore:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
L'esempio seguente mostra due mappe di messaggi alternative. La mappa dei messaggi predefinita è vuota.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
Requisiti
Intestazione: atlwin.h
BEGIN_MSG_MAP
Contrassegna l'inizio della mappa messaggi predefinita.
BEGIN_MSG_MAP(theClass)
Parametri
theClass
[in] Nome della classe contenente la mappa messaggi.
Osservazioni:
CWindowImpl::WindowProc usa la mappa dei messaggi predefinita per elaborare i messaggi inviati alla finestra. La mappa dei messaggi indirizza i messaggi alla funzione del gestore appropriata o a un'altra mappa messaggi.
Le macro seguenti eseguono il mapping di un messaggio a una funzione del gestore. Questa funzione deve essere definita in theClass.
Macro | Descrizione |
---|---|
MESSAGE_HANDLER | Esegue il mapping di un messaggio di Windows a una funzione del gestore. |
MESSAGE_RANGE_HANDLER | Esegue il mapping di un intervallo contiguo di messaggi di Windows a una funzione del gestore. |
COMMAND_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base al codice di notifica e all'identificatore della voce di menu, del controllo o dell'acceleratore. |
COMMAND_ID_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base all'identificatore della voce di menu, del controllo o dell'acceleratore. |
COMMAND_CODE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND a una funzione del gestore, in base al codice di notifica. |
COMMAND_RANGE_HANDLER | Esegue il mapping di un intervallo contiguo di messaggi WM_COMMAND a una funzione del gestore, in base all'identificatore della voce di menu, del controllo o dell'acceleratore. |
NOTIFY_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base al codice di notifica e all'identificatore del controllo. |
NOTIFY_ID_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base all'identificatore del controllo. |
NOTIFY_CODE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY a una funzione del gestore, in base al codice di notifica. |
NOTIFY_RANGE_HANDLER | Esegue il mapping di un intervallo contiguo di messaggi WM_NOTIFY a una funzione del gestore, in base all'identificatore del controllo. |
Le macro seguenti indirizzano i messaggi a un'altra mappa messaggi. Questo processo è denominato "concatenamento".
Macro | Descrizione |
---|---|
CHAIN_MSG_MAP | Concatena la mappa messaggi predefinita nella classe base. |
CHAIN_MSG_MAP_MEMBER | Concatena la mappa dei messaggi predefinita in un membro dati della classe . |
CHAIN_MSG_MAP_ALT | Concatena a una mappa messaggi alternativa nella classe base. |
CHAIN_MSG_MAP_ALT_MEMBER | Concatena a una mappa messaggi alternativa in un membro dati della classe . |
CHAIN_MSG_MAP_DYNAMIC | Concatena la mappa dei messaggi predefinita in un'altra classe in fase di esecuzione. |
Le macro seguenti indirizzano i messaggi "riflessi" dalla finestra padre. Ad esempio, un controllo invia normalmente messaggi di notifica alla relativa finestra padre per l'elaborazione, ma la finestra padre può riflettere il messaggio di nuovo al controllo.
Macro | Descrizione |
---|---|
REFLECTED_COMMAND_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base al codice di notifica e all'identificatore della voce di menu, del controllo o dell'acceleratore. |
REFLECTED_COMMAND_ID_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base all'identificatore della voce di menu, del controllo o dell'acceleratore. |
REFLECTED_COMMAND_CODE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base al codice di notifica. |
REFLECTED_COMMAND_RANGE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base a un intervallo contiguo di identificatori di controllo. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Esegue il mapping di un messaggio WM_COMMAND riflesso a una funzione del gestore, in base al codice di notifica e a un intervallo contiguo di identificatori di controllo. |
REFLECTED_NOTIFY_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base al codice di notifica e all'identificatore del controllo. |
REFLECTED_NOTIFY_ID_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base all'identificatore del controllo. |
REFLECTED_NOTIFY_CODE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base al codice di notifica. |
REFLECTED_NOTIFY_RANGE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base a un intervallo contiguo di identificatori di controllo. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Esegue il mapping di un messaggio WM_NOTIFY riflesso a una funzione del gestore, in base al codice di notifica e a un intervallo contiguo di identificatori di controllo. |
Esempio
class CMyExtWindow : public CMyBaseWindow
{
public:
BEGIN_MSG_MAP(CMyExtWindow)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
CHAIN_MSG_MAP(CMyBaseWindow)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnSetFocus(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
Quando un CMyExtWindow
oggetto riceve un messaggio di WM_PAINT, il messaggio viene indirizzato a CMyExtWindow::OnPaint
per l'elaborazione effettiva. Se OnPaint
indica che il messaggio richiede un'ulteriore elaborazione, il messaggio verrà indirizzato alla mappa dei messaggi predefinita in CMyBaseWindow
.
Oltre alla mappa dei messaggi predefinita, è possibile definire una mappa dei messaggi alternativa con ALT_MSG_MAP. Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe di messaggi alternative successive. L'esempio seguente mostra la mappa dei messaggi predefinita e una mappa messaggi alternativa, ognuna contenente una funzione del gestore:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
L'esempio seguente mostra due mappe di messaggi alternative. La mappa dei messaggi predefinita è vuota.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Si noti che esiste sempre esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Requisiti
Intestazione: atlwin.h
CHAIN_MSG_MAP_ALT
Definisce una voce in una mappa messaggi.
CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)
Parametri
theChainClass
[in] Nome della classe di base contenente la mappa messaggi.
msgMapID
[in] Identificatore della mappa dei messaggi.
Osservazioni:
CHAIN_MSG_MAP_ALT indirizza i messaggi a una mappa messaggi alternativa in una classe di base. È necessario aver dichiarato questa mappa di messaggi alternativa con ALT_MSG_MAP(msgMapID). Per indirizzare i messaggi alla mappa messaggi predefinita di una classe di base (dichiarata con BEGIN_MSG_MAP), usare CHAIN_MSG_MAP. Per un esempio, vedere CHAIN_MSG_MAP.
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Requisiti
Intestazione: atlwin.h
CHAIN_MSG_MAP_ALT_MEMBER
Definisce una voce in una mappa messaggi.
CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)
Parametri
theChainMember
[in] Nome del membro dati contenente la mappa messaggi.
msgMapID
[in] Identificatore della mappa dei messaggi.
Osservazioni:
CHAIN_MSG_MAP_ALT_MEMBER indirizza i messaggi a una mappa messaggi alternativa in un membro dati. È necessario aver dichiarato questa mappa di messaggi alternativa con ALT_MSG_MAP(msgMapID). Per indirizzare i messaggi alla mappa dei messaggi predefinita di un membro dati (dichiarata con BEGIN_MSG_MAP), usare CHAIN_MSG_MAP_MEMBER. Per un esempio, vedere CHAIN_MSG_MAP_MEMBER.
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Requisiti
Intestazione: atlwin.h
CHAIN_MSG_MAP
Definisce una voce in una mappa messaggi.
CHAIN_MSG_MAP(theChainClass)
Parametri
theChainClass
[in] Nome della classe di base contenente la mappa messaggi.
Osservazioni:
CHAIN_MSG_MAP indirizza i messaggi alla mappa dei messaggi predefinita di una classe di base (dichiarata con BEGIN_MSG_MAP). Per indirizzare i messaggi alla mappa messaggi alternativa di una classe di base (dichiarata con ALT_MSG_MAP), usare CHAIN_MSG_MAP_ALT.
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Esempio
class CMyExtClass : public CMyBaseClass
{
public:
BEGIN_MSG_MAP(CMyExtClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(1)
// chain to first alternative message map in CMyBaseClass
CHAIN_MSG_MAP(CMyBaseClass)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map in CMyBaseClass
CHAIN_MSG_MAP_ALT(CMyBaseClass, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
In questo esempio viene illustrato quanto segue:
Se una routine finestra usa
CMyClass
la mappa dei messaggi predefinita eOnPaint
non gestisce un messaggio, il messaggio viene indirizzato allaCMyBaseClass
mappa dei messaggi predefinita per l'elaborazione.Se una routine finestra usa la prima mappa messaggi alternativa in
CMyClass
, tutti i messaggi vengono indirizzati allaCMyBaseClass
mappa dei messaggi predefinita.Se una routine finestra usa
CMyClass
la seconda mappa messaggi alternativa eOnChar
non gestisce un messaggio, il messaggio viene indirizzato alla mappa dei messaggi alternativa specificata inCMyBaseClass
.CMyBaseClass
deve aver dichiarato la mappa dei messaggi con ALT_MSG_MAP(1).
Requisiti
Intestazione: atlwin.h
CHAIN_MSG_MAP_DYNAMIC
Definisce una voce in una mappa messaggi.
CHAIN_MSG_MAP_DYNAMIC(dynaChainID)
Parametri
dynaChainID
[in] Identificatore univoco per la mappa messaggi di un oggetto.
Osservazioni:
CHAIN_MSG_MAP_DYNAMIC indirizza i messaggi, in fase di esecuzione, alla mappa dei messaggi predefinita in un altro oggetto. L'oggetto e la relativa mappa messaggi sono associati a dynaChainID, definito tramite CDynamicChain::SetChainEntry. È necessario derivare la classe da CDynamicChain
per usare CHAIN_MSG_MAP_DYNAMIC. Per un esempio, vedere la panoramica di CDynamicChain .
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Requisiti
Intestazione: atlwin.h
CHAIN_MSG_MAP_MEMBER
Definisce una voce in una mappa messaggi.
CHAIN_MSG_MAP_MEMBER(theChainMember)
Parametri
theChainMember
[in] Nome del membro dati contenente la mappa messaggi.
Osservazioni:
CHAIN_MSG_MAP_MEMBER indirizza i messaggi alla mappa dei messaggi predefinita di un membro dati (dichiarata con BEGIN_MSG_MAP). Per indirizzare i messaggi alla mappa messaggi alternativa di un membro dati (dichiarata con ALT_MSG_MAP), usare CHAIN_MSG_MAP_ALT_MEMBER.
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Esempio
class CMyContainerClass : public CWindowImpl<CMyContainerClass>
{
public:
CMyContainedClass m_obj;
BEGIN_MSG_MAP(CMyContainerClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(1)
// chain to default message map of m_obj
CHAIN_MSG_MAP_MEMBER(m_obj)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CHAR, OnChar)
// chain to alternate message map of m_obj
CHAIN_MSG_MAP_ALT_MEMBER(m_obj, 1)
END_MSG_MAP()
LRESULT OnPaint(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
LRESULT OnChar(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
In questo esempio viene illustrato quanto segue:
Se una routine finestra usa
CMyClass
la mappa dei messaggi predefinita eOnPaint
non gestisce un messaggio, il messaggio viene indirizzato allam_obj
mappa dei messaggi predefinita per l'elaborazione.Se una routine finestra usa la prima mappa messaggi alternativa in
CMyClass
, tutti i messaggi vengono indirizzati allam_obj
mappa dei messaggi predefinita.Se una routine finestra usa
CMyClass
la seconda mappa messaggi alternativa eOnChar
non gestisce un messaggio, il messaggio viene indirizzato alla mappa dei messaggi alternativa specificata dim_obj
. La classeCMyContainedClass
deve aver dichiarato questa mappa messaggi con ALT_MSG_MAP(1).
Requisiti
Intestazione: atlwin.h
COMMAND_CODE_HANDLER
Analogamente a COMMAND_HANDLER, ma esegue il mapping di un messaggio WM_COMMAND basato solo sul codice di notifica.
COMMAND_CODE_HANDLER(code, func)
Parametri
code
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
COMMAND_HANDLER
Definisce una voce in una mappa messaggi.
COMMAND_HANDLER(id, code, func)
Parametri
id
[in] Identificatore della voce di menu, del controllo o dell'acceleratore.
code
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Osservazioni:
COMMAND_HANDLER esegue il mapping di un messaggio WM_COMMAND alla funzione del gestore specificata, in base al codice di notifica e all'identificatore del controllo. Ad esempio:
class ATL_NO_VTABLE CPolyProp :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CPolyProp, &CLSID_PolyProp>,
public IPropertyPageImpl<CPolyProp>,
public CDialogImpl<CPolyProp>
{
public:
BEGIN_COM_MAP(CPolyProp)
COM_INTERFACE_ENTRY(IPropertyPage)
END_COM_MAP()
BEGIN_MSG_MAP(CPolyProp)
COMMAND_HANDLER(IDC_SIDES, EN_CHANGE, OnEnChangeSides)
CHAIN_MSG_MAP(IPropertyPageImpl<CPolyProp>)
END_MSG_MAP()
// When a CPolyProp object receives a WM_COMMAND message identified
// by IDC_SIDES and EN_CHANGE, the message is directed to
// CPolyProp::OnEnChangeSides for the actual processing.
LRESULT OnEnChangeSides(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/,
BOOL& /*bHandled*/);
Qualsiasi funzione specificata in una macro COMMAND_HANDLER deve essere definita come segue:
LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
La mappa dei messaggi imposta bHandled
su TRUE prima CommandHandler
della chiamata. Se CommandHandler
non gestisce completamente il messaggio, deve essere impostato su bHandled
FALSE per indicare che il messaggio deve essere elaborato ulteriormente.
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Oltre a COMMAND_HANDLER, è possibile usare MESSAGE_HANDLER per eseguire il mapping di un messaggio di WM_COMMAND senza considerare un identificatore o un codice. In questo caso, MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction)
indiricherà tutti i messaggi WM_COMMAND a OnHandlerFunction
.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Requisiti
Intestazione: atlwin.h
COMMAND_ID_HANDLER
Analogamente a COMMAND_HANDLER, ma esegue il mapping di un messaggio WM_COMMAND basato solo sull'identificatore della voce di menu, del controllo o dell'acceleratore.
COMMAND_ID_HANDLER(id, func)
Parametri
id
[in] Identificatore della voce di menu, del controllo o dell'acceleratore che invia il messaggio.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
COMMAND_RANGE_CODE_HANDLER
Analogamente a COMMAND_RANGE_HANDLER, ma esegue il mapping dei messaggi WM_COMMAND con un codice di notifica specifico da un intervallo di controlli a una singola funzione del gestore.
COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
code
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Osservazioni:
Questo intervallo si basa sull'identificatore della voce di menu, del controllo o dell'acceleratore che invia il messaggio.
Requisiti
Intestazione: atlwin.h
COMMAND_RANGE_HANDLER
Analogamente a COMMAND_HANDLER, ma esegue il mapping dei messaggi WM_COMMAND da un intervallo di controlli a una singola funzione del gestore.
COMMAND_RANGE_HANDLER( idFirst, idLast, func)
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
func
[in] Nome della funzione del gestore messaggi.
Osservazioni:
Questo intervallo si basa sull'identificatore della voce di menu, del controllo o dell'acceleratore che invia il messaggio.
Requisiti
Intestazione: atlwin.h
DECLARE_EMPTY_MSG_MAP
Dichiara una mappa messaggi vuota.
DECLARE_EMPTY_MSG_MAP()
Osservazioni:
DECLARE_EMPTY_MSG_MAP è una macro utile che chiama le macro BEGIN_MSG_MAP e END_MSG_MAP per creare una mappa messaggi vuota:
BEGIN_MSG_MAP(CExample)
END_MSG_MAP()
DEFAULT_REFLECTION_HANDLER
Fornisce un gestore predefinito per la finestra figlio (controllo) che riceverà messaggi riflessi; il gestore passerà correttamente messaggi non gestiti a DefWindowProc
.
DEFAULT_REFLECTION_HANDLER()
Requisiti
Intestazione: atlwin.h
END_MSG_MAP
Contrassegna la fine di una mappa messaggi.
END_MSG_MAP()
Osservazioni:
Utilizzare sempre la macro BEGIN_MSG_MAP per contrassegnare l'inizio di una mappa messaggi. Usare ALT_MSG_MAP per dichiarare le mappe di messaggi alternative successive.
Si noti che esiste sempre esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Esempio
L'esempio seguente mostra la mappa dei messaggi predefinita e una mappa messaggi alternativa, ognuna contenente una funzione del gestore:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
L'esempio seguente mostra due mappe di messaggi alternative. La mappa dei messaggi predefinita è vuota.
BEGIN_MSG_MAP(CMyClass)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
ALT_MSG_MAP(2)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
Requisiti
Intestazione: atlwin.h
FORWARD_NOTIFICATIONS
Inoltra i messaggi di notifica alla finestra padre.
FORWARD_NOTIFICATIONS()
Osservazioni:
Specificare questa macro come parte della mappa dei messaggi.
Requisiti
Intestazione: atlwin.h
MESSAGE_HANDLER
Definisce una voce in una mappa messaggi.
MESSAGE_HANDLER( msg, func )
Parametri
msg
[in] Messaggio di Windows.
func
[in] Nome della funzione del gestore messaggi.
Osservazioni:
MESSAGE_HANDLER esegue il mapping di un messaggio di Windows alla funzione del gestore specificata.
Qualsiasi funzione specificata in una macro MESSAGE_HANDLER deve essere definita come segue:
LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
La mappa dei messaggi imposta bHandled
su TRUE prima MessageHandler
della chiamata. Se MessageHandler
non gestisce completamente il messaggio, deve essere impostato su bHandled
FALSE per indicare che il messaggio deve essere elaborato ulteriormente.
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Oltre a MESSAGE_HANDLER, è possibile usare rispettivamente COMMAND_HANDLER e NOTIFY_HANDLER per eseguire il mapping dei messaggi di WM_COMMAND e WM_NOTIFY .
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Esempio
class CMyBaseWindow : public CWindowImpl<CMyBaseWindow>
{
public:
BEGIN_MSG_MAP(CMyBaseWindow)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
END_MSG_MAP()
// When a CMyBaseWindow object receives a WM_CREATE message, the message
// is directed to CMyBaseWindow::OnCreate for the actual processing.
LRESULT OnCreate(UINT /*nMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
return 0;
}
};
Requisiti
Intestazione: atlwin.h
MESSAGE_RANGE_HANDLER
Analogamente a MESSAGE_HANDLER, ma esegue il mapping di un intervallo di messaggi di Windows a una singola funzione del gestore.
MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )
Parametri
msgFirst
[in] Contrassegna l'inizio di un intervallo contiguo di messaggi.
msgLast
[in] Contrassegna la fine di un intervallo contiguo di messaggi.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
NOTIFY_CODE_HANDLER
Analogamente a NOTIFY_HANDLER, ma esegue il mapping di un messaggio WM_NOTIFY basato solo sul codice di notifica.
NOTIFY_CODE_HANDLER(cd, func)
Parametri
cd
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
NOTIFY_HANDLER
Definisce una voce in una mappa messaggi.
NOTIFY_HANDLER( id, cd, func )
Parametri
id
[in] Identificatore del controllo che invia il messaggio.
cd
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Osservazioni:
NOTIFY_HANDLER esegue il mapping di un messaggio WM_NOTIFY alla funzione del gestore specificata, in base al codice di notifica e all'identificatore del controllo.
Qualsiasi funzione specificata in una macro NOTIFY_HANDLER deve essere definita come segue:
LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
La mappa dei messaggi imposta bHandled
su TRUE prima NotifyHandler
della chiamata. Se NotifyHandler
non gestisce completamente il messaggio, deve essere impostato su bHandled
FALSE per indicare che il messaggio deve essere elaborato ulteriormente.
Nota
Iniziare sempre una mappa dei messaggi con BEGIN_MSG_MAP. È quindi possibile dichiarare le mappe dei messaggi alternative successive con ALT_MSG_MAP. La macro END_MSG_MAP contrassegna la fine della mappa messaggi. Ogni mappa messaggi deve avere esattamente un'istanza di BEGIN_MSG_MAP e END_MSG_MAP.
Oltre a NOTIFY_HANDLER, è possibile usare MESSAGE_HANDLER per eseguire il mapping di un messaggio di WM_NOTIFY senza considerare un identificatore o un codice. In questo caso, MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction)
indiricherà tutti i messaggi WM_NOTIFY a OnHandlerFunction
.
Per altre informazioni sull'uso delle mappe messaggi in ATL, vedere Mappe messaggi.
Esempio
class CMyDialog2 : public CDialogImpl<CMyDialog2>
{
public:
enum { IDD = IDD_MYDLG };
BEGIN_MSG_MAP(CMyDialog2)
NOTIFY_HANDLER(IDC_TREE1, NM_CLICK, OnNMClickTree1)
END_MSG_MAP()
public:
// When a CMyDialog2 object receives a WM_NOTIFY message
// identified by IDC_TREE1 and NM_CLICK, the message is
// directed to CMyDialog2::OnNMClickTree1 for the actual
// processing.
LRESULT OnNMClickTree1(int /*idCtrl*/, LPNMHDR pNMHDR, BOOL& /*bHandled*/);
};
Requisiti
Intestazione: atlwin.h
NOTIFY_ID_HANDLER
Analogamente a NOTIFY_HANDLER, ma esegue il mapping di un messaggio WM_NOTIFY basato solo sull'identificatore del controllo.
NOTIFY_ID_HANDLER( id, func )
Parametri
id
[in] Identificatore del controllo che invia il messaggio.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
NOTIFY_RANGE_CODE_HANDLER
Analogamente a NOTIFY_RANGE_HANDLER, ma esegue il mapping dei messaggi WM_NOTIFY con un codice di notifica specifico da un intervallo di controlli a una singola funzione del gestore.
NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
cd
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Osservazioni:
Questo intervallo si basa sull'identificatore del controllo che invia il messaggio.
Requisiti
Intestazione: atlwin.h
NOTIFY_RANGE_HANDLER
Analogamente a NOTIFY_HANDLER, ma esegue il mapping dei messaggi WM_NOTIFY da un intervallo di controlli a una singola funzione del gestore.
NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
func
[in] Nome della funzione del gestore messaggi.
Osservazioni:
Questo intervallo si basa sull'identificatore del controllo che invia il messaggio.
Requisiti
Intestazione: atlwin.h
REFLECT_NOTIFICATIONS
Riflette i messaggi di notifica nella finestra figlio (controllo) che li ha inviati.
REFLECT_NOTIFICATIONS()
Osservazioni:
Specificare questa macro come parte della mappa messaggi della finestra padre.
Requisiti
Intestazione: atlwin.h
REFLECTED_COMMAND_CODE_HANDLER
Analogamente a COMMAND_CODE_HANDLER, ma esegue il mapping dei comandi riflessi dalla finestra padre.
REFLECTED_COMMAND_CODE_HANDLER( code, func )
Parametri
code
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_COMMAND_HANDLER
Simile a COMMAND_HANDLER, ma esegue il mapping dei comandi riflessi dalla finestra padre.
REFLECTED_COMMAND_HANDLER( id, code, func )
Parametri
id
[in] Identificatore della voce di menu, del controllo o dell'acceleratore.
code
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_COMMAND_ID_HANDLER
Analogamente a COMMAND_ID_HANDLER, ma esegue il mapping dei comandi riflessi dalla finestra padre.
REFLECTED_COMMAND_ID_HANDLER( id, func )
Parametri
id
[in] Identificatore della voce di menu, del controllo o dell'acceleratore.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_COMMAND_RANGE_CODE_HANDLER
Simile a COMMAND_RANGE_CODE_HANDLER, ma esegue il mapping dei comandi riflessi dalla finestra padre.
REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
code
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_COMMAND_RANGE_HANDLER
Simile a COMMAND_RANGE_HANDLER, ma esegue il mapping dei comandi riflessi dalla finestra padre.
REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_NOTIFY_CODE_HANDLER
Simile a NOTIFY_CODE_HANDLER, ma esegue il mapping delle notifiche riflesse dalla finestra padre.
REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )
Parametri
cd
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_NOTIFY_HANDLER
Simile a NOTIFY_HANDLER, ma esegue il mapping delle notifiche riflesse dalla finestra padre.
REFLECTED_NOTIFY_HANDLER( id, cd, func )
Parametri
id
[in] Identificatore della voce di menu, del controllo o dell'acceleratore.
cd
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_NOTIFY_ID_HANDLER
Simile a NOTIFY_ID_HANDLER, ma esegue il mapping delle notifiche riflesse dalla finestra padre.
REFLECTED_NOTIFY_ID_HANDLER( id, func )
Parametri
id
[in] Identificatore della voce di menu, del controllo o dell'acceleratore.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_NOTIFY_RANGE_CODE_HANDLER
Simile a NOTIFY_RANGE_CODE_HANDLER, ma esegue il mapping delle notifiche riflesse dalla finestra padre.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
cd
[in] Codice di notifica.
func
[in] Nome della funzione del gestore messaggi.
Requisiti
Intestazione: atlwin.h
REFLECTED_NOTIFY_RANGE_HANDLER
Simile a NOTIFY_RANGE_HANDLER, ma esegue il mapping delle notifiche riflesse dalla finestra padre.
REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
Parametri
idFirst
[in] Contrassegna l'inizio di un intervallo contiguo di identificatori di controllo.
idLast
[in] Contrassegna la fine di un intervallo contiguo di identificatori di controllo.
func
[in] Nome della funzione del gestore messaggi.