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 | Mapuje komunikat WM_COMMAND na funkcję obsługi na podstawie kodu powiadomienia. |
COMMAND_HANDLER | Mapuje komunikat WM_COMMAND na funkcję obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora. |
COMMAND_ID_HANDLER | Mapuje komunikat WM_COMMAND na funkcję obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora. |
COMMAND_RANGE_CODE_HANDLER | Mapuje komunikat WM_COMMAND na funkcję obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek. |
COMMAND_RANGE_HANDLER | Mapuje komunikat WM_COMMAND na funkcję 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 | Mapuje komunikat systemu Windows na funkcję obsługi. |
MESSAGE_RANGE_HANDLER | Mapuje ciągły zakres komunikatów systemu Windows na funkcję obsługi. |
NOTIFY_CODE_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie kodu powiadomienia. |
NOTIFY_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki. |
NOTIFY_ID_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie identyfikatora kontrolki. |
NOTIFY_RANGE_CODE_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek. |
NOTIFY_RANGE_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek. |
REFLECT_NOTIFICATIONS | Odzwierciedla komunikaty powiadomień z powrotem do okna, które je wysłały. |
REFLECTED_COMMAND_CODE_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie kodu powiadomienia. |
REFLECTED_COMMAND_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora. |
REFLECTED_COMMAND_ID_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek. |
REFLECTED_COMMAND_RANGE_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek. |
REFLECTED_NOTIFY_CODE_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie kodu powiadomienia. |
REFLECTED_NOTIFY_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki. |
REFLECTED_NOTIFY_ID_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie identyfikatora kontrolki. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek. |
REFLECTED_NOTIFY_RANGE_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat 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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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.
Makro | opis |
---|---|
MESSAGE_HANDLER | Mapuje komunikat systemu Windows na funkcję obsługi. |
MESSAGE_RANGE_HANDLER | Mapuje ciągły zakres komunikatów systemu Windows na funkcję obsługi. |
COMMAND_HANDLER | Mapuje komunikat WM_COMMAND na funkcję obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora. |
COMMAND_ID_HANDLER | Mapuje komunikat WM_COMMAND na funkcję obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora. |
COMMAND_CODE_HANDLER | Mapuje komunikat WM_COMMAND na funkcję obsługi na podstawie kodu powiadomienia. |
COMMAND_RANGE_HANDLER | Mapuje ciągły zakres komunikatów WM_COMMAND na funkcję obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora. |
NOTIFY_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki. |
NOTIFY_ID_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie identyfikatora kontrolki. |
NOTIFY_CODE_HANDLER | Mapuje komunikat WM_NOTIFY na funkcję obsługi na podstawie kodu powiadomienia. |
NOTIFY_RANGE_HANDLER | Mapuje 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".
Makro | 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.
Makro | opis |
---|---|
REFLECTED_COMMAND_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie kodu powiadomienia i identyfikatora elementu menu, kontrolki lub akceleratora. |
REFLECTED_COMMAND_ID_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie identyfikatora elementu menu, kontrolki lub akceleratora. |
REFLECTED_COMMAND_CODE_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie kodu powiadomienia. |
REFLECTED_COMMAND_RANGE_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Mapuje odzwierciedlone WM_COMMAND komunikat do funkcji obsługi na podstawie kodu powiadomienia i ciągłego zakresu identyfikatorów kontrolek. |
REFLECTED_NOTIFY_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie kodu powiadomienia i identyfikatora kontrolki. |
REFLECTED_NOTIFY_ID_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie identyfikatora kontrolki. |
REFLECTED_NOTIFY_CODE_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie kodu powiadomienia. |
REFLECTED_NOTIFY_RANGE_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat do funkcji obsługi na podstawie ciągłego zakresu identyfikatorów kontrolek. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Mapuje odzwierciedlone WM_NOTIFY komunikat 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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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
CMyClass
domyślnej mapy komunikatów iOnPaint
nie obsługuje komunikatu, komunikat jest kierowany doCMyBaseClass
domyślnej mapy komunikatów do przetwarzania.Jeśli procedura okna używa pierwszej alternatywnej mapy komunikatów w programie
CMyClass
, wszystkie komunikaty są kierowane doCMyBaseClass
domyślnej mapy komunikatów.Jeśli procedura okna używa
CMyClass
drugiej alternatywnej mapy komunikatów iOnChar
nie obsługuje komunikatu, komunikat jest kierowany do określonej alternatywnej mapy komunikatów w programieCMyBaseClass
.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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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
CMyClass
domyślnej mapy komunikatów iOnPaint
nie obsługuje komunikatu, komunikat jest kierowany dom_obj
domyślnej mapy komunikatów do przetwarzania.Jeśli procedura okna używa pierwszej alternatywnej mapy komunikatów w programie
CMyClass
, wszystkie komunikaty są kierowane dom_obj
domyślnej mapy komunikatów.Jeśli procedura okna używa
CMyClass
drugiej alternatywnej mapy komunikatów iOnChar
nie obsługuje komunikatu, komunikat jest kierowany do określonej alternatywnej mapy komunikatówm_obj
. KlasaCMyContainedClass
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. Na 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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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
płyta 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.
płyta 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 korzystania z map komunikatów w atl, zobacz Mapy komunikatów.
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.
płyta 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
Odzwierciedla 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
płyta 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.
płyta 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.
płyta 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.