Condividi tramite


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 CMyClassla mappa dei messaggi predefinita e OnPaint non gestisce un messaggio, il messaggio viene indirizzato alla CMyBaseClassmappa dei messaggi predefinita per l'elaborazione.

  • Se una routine finestra usa la prima mappa messaggi alternativa in CMyClass, tutti i messaggi vengono indirizzati alla CMyBaseClassmappa dei messaggi predefinita.

  • Se una routine finestra usa CMyClassla seconda mappa messaggi alternativa e OnChar non gestisce un messaggio, il messaggio viene indirizzato alla mappa dei messaggi alternativa specificata in CMyBaseClass. 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 CMyClassla mappa dei messaggi predefinita e OnPaint non gestisce un messaggio, il messaggio viene indirizzato alla m_objmappa dei messaggi predefinita per l'elaborazione.

  • Se una routine finestra usa la prima mappa messaggi alternativa in CMyClass, tutti i messaggi vengono indirizzati alla m_objmappa dei messaggi predefinita.

  • Se una routine finestra usa CMyClassla seconda mappa messaggi alternativa e OnChar non gestisce un messaggio, il messaggio viene indirizzato alla mappa dei messaggi alternativa specificata di m_obj. La classe CMyContainedClass 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.

Vedi anche

Macro