Udostępnij za pośrednictwem


Makra mapy komunikatów (ATL)

Te makra definiują mapy i wpisy komunikatów.

Nazwa/nazwisko opis
ALT_MSG_MAP Oznacza początek alternatywnej mapy komunikatów.
BEGIN_MSG_MAP Oznacza początek domyślnej mapy komunikatów.
CHAIN_MSG_MAP_ALT Tworzy łańcuchy do alternatywnej mapy komunikatów w klasie bazowej.
CHAIN_MSG_MAP_ALT_MEMBER Tworzy łańcuchy do alternatywnej mapy komunikatów w składowej danych klasy.
CHAIN_MSG_MAP Łańcuchy do domyślnej mapy komunikatów w klasie bazowej.
CHAIN_MSG_MAP_DYNAMIC Łańcuchy do mapy komunikatów w innej klasie w czasie wykonywania.
CHAIN_MSG_MAP_MEMBER Łańcuchy do domyślnej mapy komunikatów w składowej danych klasy.
COMMAND_CODE_HANDLER Mapy komunikat WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia.
COMMAND_HANDLER Mapy komunikat WM_COMMAND funkcji obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora.
COMMAND_ID_HANDLER Mapy komunikat WM_COMMAND funkcji obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora.
COMMAND_RANGE_CODE_HANDLER Mapy komunikat WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek.
COMMAND_RANGE_HANDLER Mapy komunikat WM_COMMAND funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek.
DECLARE_EMPTY_MSG_MAP Implementuje pustą mapę komunikatów.
DEFAULT_REFLECTION_HANDLER Udostępnia domyślną procedurę obsługi odzwierciedlone komunikaty, które nie są obsługiwane w przeciwnym razie.
END_MSG_MAP Oznacza koniec mapy komunikatów.
FORWARD_NOTIFICATIONS Przekazuje komunikaty powiadomień do okna nadrzędnego.
MESSAGE_HANDLER Mapy komunikat systemu Windows do funkcji obsługi.
MESSAGE_RANGE_HANDLER Mapy ciągły zakres komunikatów systemu Windows do funkcji obsługi.
NOTIFY_CODE_HANDLER Mapy komunikat WM_NOTIFY do funkcji obsługi na podstawie kodu powiadomienia.
NOTIFY_HANDLER Mapy komunikat WM_NOTIFY funkcji obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki.
NOTIFY_ID_HANDLER Mapy komunikat WM_NOTIFY do funkcji obsługi na podstawie identyfikatora kontrolki.
NOTIFY_RANGE_CODE_HANDLER Mapy komunikat WM_NOTIFY funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek.
NOTIFY_RANGE_HANDLER Mapy komunikat WM_NOTIFY funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek.
REFLECT_NOTIFICATIONS Emocje komunikaty powiadomień z powrotem do okna, które je wysłały.
REFLECTED_COMMAND_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia.
REFLECTED_COMMAND_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora.
REFLECTED_COMMAND_ID_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora.
REFLECTED_COMMAND_RANGE_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek.
REFLECTED_COMMAND_RANGE_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek.
REFLECTED_NOTIFY_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie kodu powiadomienia.
REFLECTED_NOTIFY_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY funkcji obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki.
REFLECTED_NOTIFY_ID_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie identyfikatora kontrolki.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek.
REFLECTED_NOTIFY_RANGE_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek.

Wymagania

Nagłówek: atlwin.h

ALT_MSG_MAP

Oznacza początek alternatywnej mapy komunikatów.

ALT_MSG_MAP(msgMapID)

Parametry

msgMapID
[in] Identyfikator mapy komunikatów.

Uwagi

ATL identyfikuje każdą mapę komunikatów według liczby. Domyślna mapa komunikatów (zadeklarowana przy użyciu makra BEGIN_MSG_MAP) jest identyfikowana przez 0. Alternatywna mapa komunikatów jest identyfikowana przez identyfikator msgMapID.

Mapy komunikatów są używane do przetwarzania komunikatów wysyłanych do okna. Na przykład CContainedWindow umożliwia określenie identyfikatora mapy komunikatów w obiekcie zawierającym. CContainedWindow::WindowProc następnie używa tej mapy komunikatów, aby skierować komunikaty zawartego okna do odpowiedniej funkcji obsługi lub do innej mapy komunikatów. Aby uzyskać listę makr, które deklarują funkcje obsługi, zobacz BEGIN_MSG_MAP.

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne alternatywne mapy komunikatów.

Makro END_MSG_MAP oznacza koniec mapy komunikatów. Należy pamiętać, że zawsze istnieje dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Przykład

W poniższym przykładzie przedstawiono domyślną mapę komunikatów i jedną alternatywną mapę komunikatów, z których każda zawiera jedną funkcję obsługi:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

W następnym przykładzie przedstawiono dwie alternatywne mapy komunikatów. Domyślna mapa komunikatów jest pusta.

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()

Wymagania

Nagłówek: atlwin.h

BEGIN_MSG_MAP

Oznacza początek domyślnej mapy komunikatów.

BEGIN_MSG_MAP(theClass)

Parametry

theClass
[in] Nazwa klasy zawierającej mapę komunikatów.

Uwagi

CWindowImpl::WindowProc używa domyślnej mapy komunikatów do przetwarzania komunikatów wysyłanych do okna. Mapa komunikatów kieruje komunikaty do odpowiedniej funkcji obsługi lub do innej mapy komunikatów.

Poniższe makra mapuje komunikat na funkcję obsługi. Ta funkcja musi być zdefiniowana w klasie TheClass.

Macro opis
MESSAGE_HANDLER Mapy komunikat systemu Windows do funkcji obsługi.
MESSAGE_RANGE_HANDLER Mapy ciągły zakres komunikatów systemu Windows do funkcji obsługi.
COMMAND_HANDLER Mapy komunikat WM_COMMAND funkcji obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora.
COMMAND_ID_HANDLER Mapy komunikat WM_COMMAND funkcji obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora.
COMMAND_CODE_HANDLER Mapy komunikat WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia.
COMMAND_RANGE_HANDLER Mapy ciągły zakres komunikatów WM_COMMAND do funkcji obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora.
NOTIFY_HANDLER Mapy komunikat WM_NOTIFY funkcji obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki.
NOTIFY_ID_HANDLER Mapy komunikat WM_NOTIFY do funkcji obsługi na podstawie identyfikatora kontrolki.
NOTIFY_CODE_HANDLER Mapy komunikat WM_NOTIFY do funkcji obsługi na podstawie kodu powiadomienia.
NOTIFY_RANGE_HANDLER Mapy ciągły zakres komunikatów WM_NOTIFY do funkcji obsługi na podstawie identyfikatora kontrolki.

Poniższe makra kierują komunikaty do innej mapy komunikatów. Ten proces jest nazywany "tworzeniem łańcuchów".

Macro opis
CHAIN_MSG_MAP Łańcuchy do domyślnej mapy komunikatów w klasie bazowej.
CHAIN_MSG_MAP_MEMBER Łańcuchy do domyślnej mapy komunikatów w składowej danych klasy.
CHAIN_MSG_MAP_ALT Tworzy łańcuchy do alternatywnej mapy komunikatów w klasie bazowej.
CHAIN_MSG_MAP_ALT_MEMBER Tworzy łańcuchy do alternatywnej mapy komunikatów w składowej danych klasy.
CHAIN_MSG_MAP_DYNAMIC Łańcuchy do domyślnej mapy komunikatów w innej klasie w czasie wykonywania.

Następujące makra kierują komunikaty "odzwierciedlone" z okna nadrzędnego. Na przykład kontrolka zwykle wysyła komunikaty powiadomień do okna nadrzędnego do przetwarzania, ale okno nadrzędne może odzwierciedlać komunikat z powrotem do kontrolki.

Macro opis
REFLECTED_COMMAND_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora.
REFLECTED_COMMAND_ID_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora.
REFLECTED_COMMAND_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia.
REFLECTED_COMMAND_RANGE_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek.
REFLECTED_COMMAND_RANGE_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_COMMAND do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek.
REFLECTED_NOTIFY_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY funkcji obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki.
REFLECTED_NOTIFY_ID_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie identyfikatora kontrolki.
REFLECTED_NOTIFY_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie kodu powiadomienia.
REFLECTED_NOTIFY_RANGE_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER Mapy odzwierciedlonego komunikatu WM_NOTIFY do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek.

Przykład

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;   
   }
};

CMyExtWindow Gdy obiekt odbiera komunikat WM_PAINT, komunikat jest kierowany do CMyExtWindow::OnPaint rzeczywistego przetwarzania. Jeśli OnPaint wskazuje, że komunikat wymaga dalszego przetwarzania, komunikat zostanie przekierowany do domyślnej mapy komunikatów w pliku CMyBaseWindow.

Oprócz domyślnej mapy komunikatów można zdefiniować alternatywną mapę komunikatów za pomocą ALT_MSG_MAP. Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne alternatywne mapy komunikatów. W poniższym przykładzie przedstawiono domyślną mapę komunikatów i jedną alternatywną mapę komunikatów, z których każda zawiera jedną funkcję obsługi:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

W następnym przykładzie przedstawiono dwie alternatywne mapy komunikatów. Domyślna mapa komunikatów jest pusta.

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()

Makro END_MSG_MAP oznacza koniec mapy komunikatów. Należy pamiętać, że zawsze istnieje dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Wymagania

Nagłówek: atlwin.h

CHAIN_MSG_MAP_ALT

Definiuje wpis na mapie komunikatów.

CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)

Parametry

theChainClass
[in] Nazwa klasy bazowej zawierającej mapę komunikatów.

msgMapID
[in] Identyfikator mapy komunikatów.

Uwagi

CHAIN_MSG_MAP_ALT kieruje komunikaty do alternatywnej mapy komunikatów w klasie bazowej. Musisz zadeklarować tę alternatywną mapę komunikatów z ALT_MSG_MAP(msgMapID). Aby skierować komunikaty do domyślnej mapy komunikatów klasy bazowej (zadeklarowanej przy użyciu BEGIN_MSG_MAP), użyj CHAIN_MSG_MAP. Aby zapoznać się z przykładem, zobacz CHAIN_MSG_MAP.

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne alternatywne mapy komunikatów za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Wymagania

Nagłówek: atlwin.h

CHAIN_MSG_MAP_ALT_MEMBER

Definiuje wpis na mapie komunikatów.

CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)

Parametry

theChainMember
[in] Nazwa elementu członkowskiego danych zawierającego mapę komunikatów.

msgMapID
[in] Identyfikator mapy komunikatów.

Uwagi

CHAIN_MSG_MAP_ALT_MEMBER kieruje komunikaty do alternatywnej mapy komunikatów w elemencie członkowskim danych. Musisz zadeklarować tę alternatywną mapę komunikatów z ALT_MSG_MAP(msgMapID). Aby skierować komunikaty do domyślnej mapy komunikatów elementu członkowskiego danych (zadeklarowanej przy użyciu BEGIN_MSG_MAP), użyj CHAIN_MSG_MAP_MEMBER. Aby zapoznać się z przykładem, zobacz CHAIN_MSG_MAP_MEMBER.

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne alternatywne mapy komunikatów za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Wymagania

Nagłówek: atlwin.h

CHAIN_MSG_MAP

Definiuje wpis na mapie komunikatów.

CHAIN_MSG_MAP(theChainClass)

Parametry

theChainClass
[in] Nazwa klasy bazowej zawierającej mapę komunikatów.

Uwagi

CHAIN_MSG_MAP kieruje komunikaty do domyślnej mapy komunikatów klasy bazowej (zadeklarowanej przy użyciu BEGIN_MSG_MAP). Aby skierować komunikaty do alternatywnej mapy komunikatów klasy bazowej (zadeklarowanej przy użyciu ALT_MSG_MAP), użyj CHAIN_MSG_MAP_ALT.

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne alternatywne mapy komunikatów za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Przykład

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;   
   }
};

W tym przykładzie przedstawiono następujące kwestie:

  • Jeśli procedura okna używa CMyClassdomyślnej mapy komunikatów i OnPaint nie obsługuje komunikatu, komunikat jest kierowany do CMyBaseClassdomyślnej mapy komunikatów do przetwarzania.

  • Jeśli procedura okna używa pierwszej alternatywnej mapy komunikatów w programie CMyClass, wszystkie komunikaty są kierowane do CMyBaseClassdomyślnej mapy komunikatów.

  • Jeśli procedura okna używa CMyClassdrugiej alternatywnej mapy komunikatów i OnChar nie obsługuje komunikatu, komunikat jest kierowany do określonej alternatywnej mapy komunikatów w programie CMyBaseClass. CMyBaseClass musi zadeklarować tę mapę komunikatów z ALT_MSG_MAP(1).

Wymagania

Nagłówek: atlwin.h

CHAIN_MSG_MAP_DYNAMIC

Definiuje wpis na mapie komunikatów.

CHAIN_MSG_MAP_DYNAMIC(dynaChainID)

Parametry

dynaChainID
[in] Unikatowy identyfikator mapy komunikatów obiektu.

Uwagi

CHAIN_MSG_MAP_DYNAMIC kieruje komunikaty w czasie wykonywania do domyślnej mapy komunikatów w innym obiekcie. Obiekt i jego mapa komunikatów są skojarzone z identyfikatorem dynaChainID, który definiuje się za pomocą pliku CDynamicChain::SetChainEntry. Aby można było używać CHAIN_MSG_MAP_DYNAMIC, musisz utworzyć klasę z CDynamicChain klasy . Aby zapoznać się z przykładem, zobacz omówienie narzędzia CDynamicChain .

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne alternatywne mapy komunikatów za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Wymagania

Nagłówek: atlwin.h

CHAIN_MSG_MAP_MEMBER

Definiuje wpis na mapie komunikatów.

CHAIN_MSG_MAP_MEMBER(theChainMember)

Parametry

theChainMember
[in] Nazwa elementu członkowskiego danych zawierającego mapę komunikatów.

Uwagi

CHAIN_MSG_MAP_MEMBER kieruje komunikaty do domyślnej mapy komunikatów elementu członkowskiego danych (zadeklarowanej przy użyciu BEGIN_MSG_MAP). Aby skierować komunikaty do alternatywnej mapy komunikatów członka danych (zadeklarowanej za pomocą ALT_MSG_MAP), użyj CHAIN_MSG_MAP_ALT_MEMBER.

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne alternatywne mapy komunikatów za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Przykład

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;   
   }
};

W tym przykładzie przedstawiono następujące kwestie:

  • Jeśli procedura okna używa CMyClassdomyślnej mapy komunikatów i OnPaint nie obsługuje komunikatu, komunikat jest kierowany do m_objdomyślnej mapy komunikatów do przetwarzania.

  • Jeśli procedura okna używa pierwszej alternatywnej mapy komunikatów w programie CMyClass, wszystkie komunikaty są kierowane do m_objdomyślnej mapy komunikatów.

  • Jeśli procedura okna używa CMyClassdrugiej alternatywnej mapy komunikatów i OnChar nie obsługuje komunikatu, komunikat jest kierowany do określonej alternatywnej mapy komunikatów m_obj. Klasa CMyContainedClass musi zadeklarować tę mapę komunikatów z ALT_MSG_MAP(1).

Wymagania

Nagłówek: atlwin.h

COMMAND_CODE_HANDLER

Podobnie jak COMMAND_HANDLER, ale mapuje WM_COMMAND komunikat tylko na podstawie kodu powiadomienia.

COMMAND_CODE_HANDLER(code, func)

Parametry

kod
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

COMMAND_HANDLER

Definiuje wpis na mapie komunikatów.

COMMAND_HANDLER(id, code, func)

Parametry

id
[in] Identyfikator elementu menu, kontrolki lub akceleratora.

kod
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Uwagi

COMMAND_HANDLER mapuje komunikat WM_COMMAND na określoną funkcję obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki. Przykład:

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*/);

Każda funkcja określona w makrze COMMAND_HANDLER musi być zdefiniowana w następujący sposób:

LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);

Mapa komunikatów ustawia wartość bHandled TRUE przed CommandHandler wywołaniami. Jeśli CommandHandler komunikat nie jest w pełni obsługiwany, powinien on mieć wartość bHandled FALSE, aby wskazać, że komunikat wymaga dalszego przetwarzania.

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne mapy komunikatów alternatywnych za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Oprócz COMMAND_HANDLER można użyć MESSAGE_HANDLER do mapowania komunikatu WM_COMMAND bez względu na identyfikator lub kod. W takim przypadku MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction) spowoduje przekierowanie wszystkich komunikatów WM_COMMAND do .OnHandlerFunction

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Wymagania

Nagłówek: atlwin.h

COMMAND_ID_HANDLER

Podobnie jak COMMAND_HANDLER, ale mapuje komunikat WM_COMMAND na podstawie identyfikatora elementu menu, kontrolki lub akceleratora.

COMMAND_ID_HANDLER(id, func)

Parametry

id
[in] Identyfikator elementu menu, kontrolki lub akceleratora wysyłającego komunikat.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

COMMAND_RANGE_CODE_HANDLER

Podobnie jak COMMAND_RANGE_HANDLER, ale mapuje komunikaty WM_COMMAND z określonym kodem powiadomień z zakresu kontrolek do jednej funkcji obsługi.

COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

kod
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Uwagi

Ten zakres jest oparty na identyfikatorze elementu menu, kontrolki lub akceleratora wysyłającego komunikat.

Wymagania

Nagłówek: atlwin.h

COMMAND_RANGE_HANDLER

Podobnie jak COMMAND_HANDLER, ale mapuje komunikaty WM_COMMAND z zakresu kontrolek na jedną funkcję obsługi.

COMMAND_RANGE_HANDLER( idFirst, idLast, func)

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

func
[in] Nazwa funkcji obsługi komunikatów.

Uwagi

Ten zakres jest oparty na identyfikatorze elementu menu, kontrolki lub akceleratora wysyłającego komunikat.

Wymagania

Nagłówek: atlwin.h

DECLARE_EMPTY_MSG_MAP

Deklaruje pustą mapę komunikatów.

DECLARE_EMPTY_MSG_MAP()

Uwagi

DECLARE_EMPTY_MSG_MAP to wygodne makro, które wywołuje makra BEGIN_MSG_MAP i END_MSG_MAP, aby utworzyć pustą mapę komunikatów:

BEGIN_MSG_MAP(CExample)
END_MSG_MAP()

DEFAULT_REFLECTION_HANDLER

Udostępnia domyślną procedurę obsługi okna podrzędnego (kontrolki), która będzie odbierać odzwierciedlone komunikaty; program obsługi prawidłowo przekaże nieobsługiwane komunikaty do DefWindowProc.

DEFAULT_REFLECTION_HANDLER()

Wymagania

Nagłówek: atlwin.h

END_MSG_MAP

Oznacza koniec mapy komunikatów.

END_MSG_MAP()

Uwagi

Zawsze używaj makra BEGIN_MSG_MAP , aby oznaczyć początek mapy komunikatów. Użyj ALT_MSG_MAP , aby zadeklarować kolejne mapy komunikatów alternatywnych.

Należy pamiętać, że zawsze istnieje dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Przykład

W poniższym przykładzie przedstawiono domyślną mapę komunikatów i jedną alternatywną mapę komunikatów, z których każda zawiera jedną funkcję obsługi:

BEGIN_MSG_MAP(CMyOneAltClass)
   MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
   MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()

W następnym przykładzie przedstawiono dwie alternatywne mapy komunikatów. Domyślna mapa komunikatów jest pusta.

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()

Wymagania

Nagłówek: atlwin.h

FORWARD_NOTIFICATIONS

Przekazuje komunikaty powiadomień do okna nadrzędnego.

FORWARD_NOTIFICATIONS()

Uwagi

Określ to makro jako część mapy komunikatów.

Wymagania

Nagłówek: atlwin.h

MESSAGE_HANDLER

Definiuje wpis na mapie komunikatów.

MESSAGE_HANDLER( msg, func )

Parametry

Msg
[in] Komunikat systemu Windows.

func
[in] Nazwa funkcji obsługi komunikatów.

Uwagi

MESSAGE_HANDLER mapuje komunikat systemu Windows na określoną funkcję obsługi.

Każda funkcja określona w makrze MESSAGE_HANDLER musi być zdefiniowana w następujący sposób:

LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

Mapa komunikatów ustawia wartość bHandled TRUE przed MessageHandler wywołaniami. Jeśli MessageHandler komunikat nie jest w pełni obsługiwany, powinien on mieć wartość bHandled FALSE, aby wskazać, że komunikat wymaga dalszego przetwarzania.

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne mapy komunikatów alternatywnych za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Oprócz MESSAGE_HANDLER można używać odpowiednio COMMAND_HANDLER i NOTIFY_HANDLER do mapowania komunikatów WM_COMMAND i WM_NOTIFY .

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Przykład

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;   
   }
};

Wymagania

Nagłówek: atlwin.h

MESSAGE_RANGE_HANDLER

Podobnie jak MESSAGE_HANDLER, ale mapuje zakres komunikatów systemu Windows na jedną funkcję obsługi.

MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )

Parametry

msgFirst
[in] Oznacza początek ciągłego zakresu komunikatów.

msgLast
[in] Oznacza koniec ciągłego zakresu komunikatów.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

NOTIFY_CODE_HANDLER

Podobnie jak NOTIFY_HANDLER, ale mapuje komunikat WM_NOTIFY tylko na podstawie kodu powiadomienia.

NOTIFY_CODE_HANDLER(cd, func)

Parametry

Cd
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

NOTIFY_HANDLER

Definiuje wpis na mapie komunikatów.

NOTIFY_HANDLER( id, cd, func )

Parametry

id
[in] Identyfikator kontrolki wysyłającej komunikat.

Cd
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Uwagi

NOTIFY_HANDLER mapuje komunikat WM_NOTIFY na określoną funkcję obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki.

Każda funkcja określona w makrze NOTIFY_HANDLER musi być zdefiniowana w następujący sposób:

LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

Mapa komunikatów ustawia wartość bHandled TRUE przed NotifyHandler wywołaniami. Jeśli NotifyHandler komunikat nie jest w pełni obsługiwany, powinien on mieć wartość bHandled FALSE, aby wskazać, że komunikat wymaga dalszego przetwarzania.

Uwaga

Zawsze rozpocznij mapę komunikatów przy użyciu BEGIN_MSG_MAP. Następnie można zadeklarować kolejne mapy komunikatów alternatywnych za pomocą ALT_MSG_MAP. Makro END_MSG_MAP oznacza koniec mapy komunikatów. Każda mapa komunikatów musi mieć dokładnie jedno wystąpienie BEGIN_MSG_MAP i END_MSG_MAP.

Oprócz NOTIFY_HANDLER można użyć MESSAGE_HANDLER do mapowania komunikatu WM_NOTIFY bez względu na identyfikator lub kod. W takim przypadku MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction) spowoduje przekierowanie wszystkich komunikatów WM_NOTIFY do OnHandlerFunction.

Aby uzyskać więcej informacji na temat używania map komunikatów w atl, zobacz Komunikat Mapy.

Przykład

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*/);
};

Wymagania

Nagłówek: atlwin.h

NOTIFY_ID_HANDLER

Podobnie jak NOTIFY_HANDLER, ale mapuje komunikat WM_NOTIFY tylko na podstawie identyfikatora kontrolki.

NOTIFY_ID_HANDLER( id, func )

Parametry

id
[in] Identyfikator kontrolki wysyłającej komunikat.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

NOTIFY_RANGE_CODE_HANDLER

Podobnie jak NOTIFY_RANGE_HANDLER, ale mapuje WM_NOTIFY komunikaty z określonym kodem powiadomień z zakresu kontrolek do jednej funkcji obsługi.

NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

Cd
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Uwagi

Ten zakres jest oparty na identyfikatorze kontrolki wysyłającej komunikat.

Wymagania

Nagłówek: atlwin.h

NOTIFY_RANGE_HANDLER

Podobnie jak NOTIFY_HANDLER, ale mapuje WM_NOTIFY komunikaty z zakresu kontrolek na jedną funkcję obsługi.

NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

func
[in] Nazwa funkcji obsługi komunikatów.

Uwagi

Ten zakres jest oparty na identyfikatorze kontrolki wysyłającej komunikat.

Wymagania

Nagłówek: atlwin.h

REFLECT_NOTIFICATIONS

Emocje komunikaty powiadomień z powrotem do okna podrzędnego (kontrolki), które je wysłały.

REFLECT_NOTIFICATIONS()

Uwagi

Określ to makro jako część mapy komunikatów okna nadrzędnego.

Wymagania

Nagłówek: atlwin.h

REFLECTED_COMMAND_CODE_HANDLER

Podobnie jak COMMAND_CODE_HANDLER, ale mapuje polecenia odzwierciedlone w oknie nadrzędnym.

REFLECTED_COMMAND_CODE_HANDLER( code, func )

Parametry

kod
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_COMMAND_HANDLER

Podobnie jak COMMAND_HANDLER, ale mapuje polecenia odzwierciedlone w oknie nadrzędnym.

REFLECTED_COMMAND_HANDLER( id, code, func )

Parametry

id
[in] Identyfikator elementu menu, kontrolki lub akceleratora.

kod
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_COMMAND_ID_HANDLER

Podobnie jak COMMAND_ID_HANDLER, ale mapuje polecenia odzwierciedlone w oknie nadrzędnym.

REFLECTED_COMMAND_ID_HANDLER( id, func )

Parametry

id
[in] Identyfikator elementu menu, kontrolki lub akceleratora.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_COMMAND_RANGE_CODE_HANDLER

Podobnie jak COMMAND_RANGE_CODE_HANDLER, ale mapuje polecenia odzwierciedlone w oknie nadrzędnym.

REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

kod
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_COMMAND_RANGE_HANDLER

Podobnie jak COMMAND_RANGE_HANDLER, ale mapuje polecenia odzwierciedlone w oknie nadrzędnym.

REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_NOTIFY_CODE_HANDLER

Podobnie jak NOTIFY_CODE_HANDLER, ale mapuje powiadomienia odzwierciedlone w oknie nadrzędnym.

REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )

Parametry

Cd
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_NOTIFY_HANDLER

Podobnie jak NOTIFY_HANDLER, ale mapuje powiadomienia odzwierciedlone w oknie nadrzędnym.

REFLECTED_NOTIFY_HANDLER( id, cd, func )

Parametry

id
[in] Identyfikator elementu menu, kontrolki lub akceleratora.

Cd
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_NOTIFY_ID_HANDLER

Podobnie jak NOTIFY_ID_HANDLER, ale mapuje powiadomienia odzwierciedlone w oknie nadrzędnym.

REFLECTED_NOTIFY_ID_HANDLER( id, func )

Parametry

id
[in] Identyfikator elementu menu, kontrolki lub akceleratora.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_NOTIFY_RANGE_CODE_HANDLER

Podobnie jak NOTIFY_RANGE_CODE_HANDLER, ale mapuje powiadomienia odzwierciedlone w oknie nadrzędnym.

REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

Cd
[in] Kod powiadomienia.

func
[in] Nazwa funkcji obsługi komunikatów.

Wymagania

Nagłówek: atlwin.h

REFLECTED_NOTIFY_RANGE_HANDLER

Podobnie jak NOTIFY_RANGE_HANDLER, ale mapuje powiadomienia odzwierciedlone w oknie nadrzędnym.

REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )

Parametry

idFirst
[in] Oznacza początek ciągłego zakresu identyfikatorów kontrolek.

idLast
[in] Oznacza koniec ciągłego zakresu identyfikatorów kontrolek.

func
[in] Nazwa funkcji obsługi komunikatów.

Zobacz też

Makra