Makra map zpráv (ATL)
Tato makra definují mapy zpráv a položky.
Název | Popis |
---|---|
ALT_MSG_MAP | Označí začátek alternativní mapy zpráv. |
BEGIN_MSG_MAP | Označí začátek výchozí mapy zpráv. |
CHAIN_MSG_MAP_ALT | Zřetězí se s alternativní mapou zpráv v základní třídě. |
CHAIN_MSG_MAP_ALT_MEMBER | Zřetězí se s alternativní mapou zpráv v datovém členu třídy. |
CHAIN_MSG_MAP | Zřetězí výchozí mapu zpráv v základní třídě. |
CHAIN_MSG_MAP_DYNAMIC | Zřetědí mapu zpráv v jiné třídě za běhu. |
CHAIN_MSG_MAP_MEMBER | Zřetězí výchozí mapu zpráv v datovém členu třídy. |
COMMAND_CODE_HANDLER | Namapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení. |
COMMAND_HANDLER | Mapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
COMMAND_ID_HANDLER | Mapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
COMMAND_RANGE_CODE_HANDLER | Mapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení a souvislého rozsahu identifikátorů ovládacích prvků. |
COMMAND_RANGE_HANDLER | Mapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě souvislého rozsahu identifikátorů ovládacích prvků. |
DECLARE_EMPTY_MSG_MAP | Implementuje prázdnou mapu zpráv. |
DEFAULT_REFLECTION_HANDLER | Poskytuje výchozí obslužnou rutinu pro reflektované zprávy, které nejsou zpracovávány jinak. |
END_MSG_MAP | Označí konec mapy zpráv. |
FORWARD_NOTIFICATIONS | Přepošla zprávy s oznámeními do nadřazeného okna. |
MESSAGE_HANDLER | Namapuje zprávu systému Windows na funkci obslužné rutiny. |
MESSAGE_RANGE_HANDLER | Mapuje souvislou oblast zpráv Systému Windows na funkci obslužné rutiny. |
NOTIFY_CODE_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení. |
NOTIFY_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru ovládacího prvku. |
NOTIFY_ID_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě identifikátoru ovládacího prvku. |
NOTIFY_RANGE_CODE_HANDLER | Mapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení a souvislého rozsahu identifikátorů ovládacích prvků. |
NOTIFY_RANGE_HANDLER | Mapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě souvislého rozsahu identifikátorů ovládacích prvků. |
REFLECT_NOTIFICATIONS | Zobrazuje zprávy s oznámením zpět do okna, které je poslalo. |
REFLECTED_COMMAND_CODE_HANDLER | Namapuje reflektovat WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení. |
REFLECTED_COMMAND_HANDLER | Mapuje reflektační WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
REFLECTED_COMMAND_ID_HANDLER | Mapuje reflektační WM_COMMAND zprávu na funkci obslužné rutiny na základě identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Namapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení a souvislého rozsahu identifikátorů ovládacích prvků. |
REFLECTED_COMMAND_RANGE_HANDLER | Namapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě souvislého rozsahu identifikátorů ovládacích prvků. |
REFLECTED_NOTIFY_CODE_HANDLER | Namapuje reflektovat WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení. |
REFLECTED_NOTIFY_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru ovládacího prvku. |
REFLECTED_NOTIFY_ID_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě identifikátoru ovládacího prvku. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Mapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení a souvislého rozsahu identifikátorů ovládacích prvků. |
REFLECTED_NOTIFY_RANGE_HANDLER | Mapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě souvislého rozsahu identifikátorů ovládacích prvků. |
Požadavky
Hlavička: atlwin.h
ALT_MSG_MAP
Označí začátek alternativní mapy zpráv.
ALT_MSG_MAP(msgMapID)
Parametry
msgMapID
[v] Identifikátor mapy zpráv.
Poznámky
ATL identifikuje každou mapu zpráv číslem. Výchozí mapa zpráv (deklarovaná pomocí makra BEGIN_MSG_MAP) je identifikována hodnotou 0. Alternativní mapa zpráv je identifikována msgMapID.
Mapy zpráv se používají ke zpracování zpráv odeslaných do okna. Například CContainedWindow umožňuje zadat identifikátor mapy zprávy v obsahujícím objektu. CContainedWindow::WindowProc pak pomocí této mapy zpráv směruje zprávy obsaženého okna buď na příslušnou funkci obslužné rutiny, nebo na jinou mapu zpráv. Seznam maker deklarovaných funkcí obslužné rutiny najdete v tématu BEGIN_MSG_MAP.
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv.
Makro END_MSG_MAP označuje konec mapy zpráv. Všimněte si, že vždy existuje přesně jedna instance BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Příklad
Následující příklad ukazuje výchozí mapu zpráv a jednu alternativní mapu zpráv, z nichž každá obsahuje jednu funkci obslužné rutiny:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
Následující příklad ukazuje dvě alternativní mapy zpráv. Výchozí mapa zpráv je prázdná.
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()
Požadavky
Hlavička: atlwin.h
BEGIN_MSG_MAP
Označí začátek výchozí mapy zpráv.
BEGIN_MSG_MAP(theClass)
Parametry
theClass
[v] Název třídy obsahující mapu zpráv.
Poznámky
CWindowImpl::WindowProc používá výchozí mapu zpráv ke zpracování zpráv odeslaných do okna. Mapa zpráv směruje zprávy buď na příslušnou funkci obslužné rutiny, nebo na jinou mapu zpráv.
Následující makra mapují zprávu na funkci obslužné rutiny. Tato funkce musí být definována v třídě.
Makro | Popis |
---|---|
MESSAGE_HANDLER | Namapuje zprávu systému Windows na funkci obslužné rutiny. |
MESSAGE_RANGE_HANDLER | Mapuje souvislou oblast zpráv Systému Windows na funkci obslužné rutiny. |
COMMAND_HANDLER | Mapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
COMMAND_ID_HANDLER | Mapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
COMMAND_CODE_HANDLER | Namapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení. |
COMMAND_RANGE_HANDLER | Mapuje souvislou oblast WM_COMMAND zpráv na funkci obslužné rutiny na základě identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
NOTIFY_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru ovládacího prvku. |
NOTIFY_ID_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě identifikátoru ovládacího prvku. |
NOTIFY_CODE_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení. |
NOTIFY_RANGE_HANDLER | Mapuje souvislou oblast WM_NOTIFY zpráv na funkci obslužné rutiny na základě identifikátoru ovládacího prvku. |
Následující makra směrují zprávy do jiné mapy zpráv. Tento proces se nazývá řetězení.
Makro | Popis |
---|---|
CHAIN_MSG_MAP | Zřetězí výchozí mapu zpráv v základní třídě. |
CHAIN_MSG_MAP_MEMBER | Zřetězí výchozí mapu zpráv v datovém členu třídy. |
CHAIN_MSG_MAP_ALT | Zřetězí se s alternativní mapou zpráv v základní třídě. |
CHAIN_MSG_MAP_ALT_MEMBER | Zřetězí se s alternativní mapou zpráv v datovém členu třídy. |
CHAIN_MSG_MAP_DYNAMIC | Zřetězí výchozí mapu zpráv v jiné třídě za běhu. |
Následující makra přímo "odrazují" zprávy z nadřazeného okna. Například ovládací prvek obvykle odesílá zprávy s oznámením do nadřazeného okna ke zpracování, ale nadřazené okno může odrážet zprávu zpět do ovládacího prvku.
Makro | Popis |
---|---|
REFLECTED_COMMAND_HANDLER | Mapuje reflektační WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
REFLECTED_COMMAND_ID_HANDLER | Mapuje reflektační WM_COMMAND zprávu na funkci obslužné rutiny na základě identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru. |
REFLECTED_COMMAND_CODE_HANDLER | Namapuje reflektovat WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení. |
REFLECTED_COMMAND_RANGE_HANDLER | Namapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě souvislého rozsahu identifikátorů ovládacích prvků. |
REFLECTED_COMMAND_RANGE_CODE_HANDLER | Namapuje WM_COMMAND zprávu na funkci obslužné rutiny na základě kódu oznámení a souvislého rozsahu identifikátorů ovládacích prvků. |
REFLECTED_NOTIFY_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení a identifikátoru ovládacího prvku. |
REFLECTED_NOTIFY_ID_HANDLER | Namapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě identifikátoru ovládacího prvku. |
REFLECTED_NOTIFY_CODE_HANDLER | Namapuje reflektovat WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení. |
REFLECTED_NOTIFY_RANGE_HANDLER | Mapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě souvislého rozsahu identifikátorů ovládacích prvků. |
REFLECTED_NOTIFY_RANGE_CODE_HANDLER | Mapuje WM_NOTIFY zprávu na funkci obslužné rutiny na základě kódu oznámení a souvislého rozsahu identifikátorů ovládacích prvků. |
Příklad
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
Když objekt obdrží WM_PAINT zprávu, zpráva se směruje na CMyExtWindow::OnPaint
skutečné zpracování. Pokud OnPaint
označuje, že zpráva vyžaduje další zpracování, bude zpráva přesměrována na výchozí mapu zpráv v CMyBaseWindow
.
Kromě výchozí mapy zpráv můžete definovat alternativní mapu zpráv pomocí ALT_MSG_MAP. Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv. Následující příklad ukazuje výchozí mapu zpráv a jednu alternativní mapu zpráv, z nichž každá obsahuje jednu funkci obslužné rutiny:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
Následující příklad ukazuje dvě alternativní mapy zpráv. Výchozí mapa zpráv je prázdná.
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 označuje konec mapy zpráv. Všimněte si, že vždy existuje přesně jedna instance BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Požadavky
Hlavička: atlwin.h
CHAIN_MSG_MAP_ALT
Definuje položku v mapě zpráv.
CHAIN_MSG_MAP_ALT(theChainClass, msgMapID)
Parametry
theChainClass
[v] Název základní třídy obsahující mapu zpráv.
msgMapID
[v] Identifikátor mapy zpráv.
Poznámky
CHAIN_MSG_MAP_ALT směruje zprávy na alternativní mapu zpráv v základní třídě. Musíte deklarovat tuto alternativní mapu zpráv s ALT_MSG_MAP(msgMapID). Chcete-li směrovat zprávy do výchozí mapy zpráv základní třídy (deklarované pomocí BEGIN_MSG_MAP), použijte CHAIN_MSG_MAP. Příklad najdete v CHAIN_MSG_MAP.
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Požadavky
Hlavička: atlwin.h
CHAIN_MSG_MAP_ALT_MEMBER
Definuje položku v mapě zpráv.
CHAIN_MSG_MAP_ALT_MEMBER(theChainMember, msgMapID)
Parametry
TheChainMember
[v] Název datového člena obsahujícího mapu zpráv.
msgMapID
[v] Identifikátor mapy zpráv.
Poznámky
CHAIN_MSG_MAP_ALT_MEMBER směruje zprávy na alternativní mapu zpráv v datovém členu. Musíte deklarovat tuto alternativní mapu zpráv s ALT_MSG_MAP(msgMapID). Chcete-li směrovat zprávy na výchozí mapu zpráv datového člena (deklarovanou pomocí BEGIN_MSG_MAP), použijte CHAIN_MSG_MAP_MEMBER. Příklad najdete v tématu CHAIN_MSG_MAP_MEMBER.
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Požadavky
Hlavička: atlwin.h
CHAIN_MSG_MAP
Definuje položku v mapě zpráv.
CHAIN_MSG_MAP(theChainClass)
Parametry
theChainClass
[v] Název základní třídy obsahující mapu zpráv.
Poznámky
CHAIN_MSG_MAP směruje zprávy do výchozí mapy zpráv základní třídy (deklarované pomocí BEGIN_MSG_MAP). Pokud chcete směrovat zprávy do alternativní mapy zpráv základní třídy (deklarované pomocí ALT_MSG_MAP), použijte CHAIN_MSG_MAP_ALT.
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Příklad
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;
}
};
Tento příklad ukazuje následující:
Pokud procedura okna používá
CMyClass
výchozí mapu zpráv aOnPaint
nezpracuje zprávu, zpráva se přesměruje naCMyBaseClass
výchozí mapu zpráv pro zpracování.Pokud procedura okna používá první alternativní mapu zpráv v
CMyClass
, všechny zprávy jsou směrovány naCMyBaseClass
výchozí mapu zpráv.Pokud procedura okna používá
CMyClass
druhou alternativní mapu zpráv aOnChar
nezpracuje zprávu, zpráva se přesměruje na zadanou alternativní mapu zpráv vCMyBaseClass
souboru .CMyBaseClass
musí být deklarována tato mapa zpráv s ALT_MSG_MAP(1).
Požadavky
Hlavička: atlwin.h
CHAIN_MSG_MAP_DYNAMIC
Definuje položku v mapě zpráv.
CHAIN_MSG_MAP_DYNAMIC(dynaChainID)
Parametry
dynaChainID
[v] Jedinečný identifikátor mapy zpráv objektu.
Poznámky
CHAIN_MSG_MAP_DYNAMIC směruje zprávy za běhu na výchozí mapu zpráv v jiném objektu. Objekt a jeho mapa zprávy jsou přidruženy dynaChainID, který definujete prostřednictvím CDynamicChain::SetChainEntry. Chcete-li použít CHAIN_MSG_MAP_DYNAMIC, musíte třídu CDynamicChain
odvodit. Příklad najdete v přehledu CDynamicChain .
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Požadavky
Hlavička: atlwin.h
CHAIN_MSG_MAP_MEMBER
Definuje položku v mapě zpráv.
CHAIN_MSG_MAP_MEMBER(theChainMember)
Parametry
TheChainMember
[v] Název datového člena obsahujícího mapu zpráv.
Poznámky
CHAIN_MSG_MAP_MEMBER směruje zprávy na výchozí mapu zpráv datového člena (deklarovanou pomocí BEGIN_MSG_MAP). Pokud chcete směrovat zprávy na alternativní mapu zpráv datového člena (deklarované pomocí ALT_MSG_MAP), použijte CHAIN_MSG_MAP_ALT_MEMBER.
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Příklad
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;
}
};
Tento příklad ukazuje následující:
Pokud procedura okna používá
CMyClass
výchozí mapu zpráv aOnPaint
nezpracuje zprávu, zpráva se přesměruje nam_obj
výchozí mapu zpráv pro zpracování.Pokud procedura okna používá první alternativní mapu zpráv v
CMyClass
, všechny zprávy jsou směrovány nam_obj
výchozí mapu zpráv.Pokud procedura okna používá
CMyClass
druhou alternativní mapu zpráv aOnChar
nezpracuje zprávu, zpráva se přesměruje na zadanou alternativní mapum_obj
zprávy . TřídaCMyContainedClass
musí deklarovat tuto mapu zpráv s ALT_MSG_MAP(1).
Požadavky
Hlavička: atlwin.h
COMMAND_CODE_HANDLER
Podobá se COMMAND_HANDLER, ale mapuje WM_COMMAND zprávu pouze na základě kódu oznámení.
COMMAND_CODE_HANDLER(code, func)
Parametry
kód
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
COMMAND_HANDLER
Definuje položku v mapě zpráv.
COMMAND_HANDLER(id, code, func)
Parametry
id
[v] Identifikátor položky nabídky, ovládacího prvku nebo akcelerátoru.
kód
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Poznámky
COMMAND_HANDLER mapuje WM_COMMAND zprávu na zadanou funkci obslužné rutiny na základě kódu oznámení a identifikátoru ovládacího prvku. Příklad:
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*/);
Libovolná funkce zadaná v makrech COMMAND_HANDLER musí být definována takto:
LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
Mapa zpráv se před zavolání nastaví bHandled
na TRUE CommandHandler
. Pokud CommandHandler
zprávu plně nezpracuje, měla by být nastavena bHandled
na HODNOTU FALSE, aby bylo možné označit, že zpráva potřebuje další zpracování.
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Kromě COMMAND_HANDLER můžete pomocí MESSAGE_HANDLER namapovat WM_COMMAND zprávu bez ohledu na identifikátor nebo kód. V tomto případě MESSAGE_HANDLER(WM_COMMAND, OnHandlerFunction)
bude všechny WM_COMMAND zprávy směrovat na OnHandlerFunction
.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Požadavky
Hlavička: atlwin.h
COMMAND_ID_HANDLER
Podobá se COMMAND_HANDLER, ale mapuje WM_COMMAND zprávu pouze na základě identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru.
COMMAND_ID_HANDLER(id, func)
Parametry
id
[v] Identifikátor položky nabídky, ovládacího prvku nebo akcelerátoru, který zprávu odesílá.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
COMMAND_RANGE_CODE_HANDLER
Podobně jako COMMAND_RANGE_HANDLER, ale mapuje WM_COMMAND zprávy s konkrétním kódem oznámení z řady ovládacích prvků na jednu funkci obslužné rutiny.
COMMAND_RANGE_CODE_HANDLER(idFirst, idLast, code, func)
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
kód
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Poznámky
Tato oblast je založená na identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru, který zprávu odesílá.
Požadavky
Hlavička: atlwin.h
COMMAND_RANGE_HANDLER
Podobně jako COMMAND_HANDLER, ale mapuje WM_COMMAND zprávy z řady ovládacích prvků na jednu funkci obslužné rutiny.
COMMAND_RANGE_HANDLER( idFirst, idLast, func)
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
func
[v] Název funkce obslužné rutiny zprávy.
Poznámky
Tato oblast je založená na identifikátoru položky nabídky, ovládacího prvku nebo akcelerátoru, který zprávu odesílá.
Požadavky
Hlavička: atlwin.h
DECLARE_EMPTY_MSG_MAP
Deklaruje prázdnou mapu zpráv.
DECLARE_EMPTY_MSG_MAP()
Poznámky
DECLARE_EMPTY_MSG_MAP je pohodlné makro, které volá makra BEGIN_MSG_MAP a END_MSG_MAP k vytvoření prázdné mapy zpráv:
BEGIN_MSG_MAP(CExample)
END_MSG_MAP()
DEFAULT_REFLECTION_HANDLER
Poskytuje výchozí obslužnou rutinu pro podřízené okno (ovládací prvek), který bude přijímat reflektující zprávy; obslužná rutina správně předá neošetřené zprávy DefWindowProc
.
DEFAULT_REFLECTION_HANDLER()
Požadavky
Hlavička: atlwin.h
END_MSG_MAP
Označí konec mapy zpráv.
END_MSG_MAP()
Poznámky
K označení začátku mapy zpráv vždy použijte makro BEGIN_MSG_MAP . Pomocí ALT_MSG_MAP deklarujte další alternativní mapy zpráv.
Všimněte si, že vždy existuje přesně jedna instance BEGIN_MSG_MAP a END_MSG_MAP.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Příklad
Následující příklad ukazuje výchozí mapu zpráv a jednu alternativní mapu zpráv, z nichž každá obsahuje jednu funkci obslužné rutiny:
BEGIN_MSG_MAP(CMyOneAltClass)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
ALT_MSG_MAP(1)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
END_MSG_MAP()
Následující příklad ukazuje dvě alternativní mapy zpráv. Výchozí mapa zpráv je prázdná.
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()
Požadavky
Hlavička: atlwin.h
FORWARD_NOTIFICATIONS
Přepošla zprávy s oznámeními do nadřazeného okna.
FORWARD_NOTIFICATIONS()
Poznámky
Toto makro zadejte jako součást mapy zpráv.
Požadavky
Hlavička: atlwin.h
MESSAGE_HANDLER
Definuje položku v mapě zpráv.
MESSAGE_HANDLER( msg, func )
Parametry
Msg
[v] Zpráva systému Windows.
func
[v] Název funkce obslužné rutiny zprávy.
Poznámky
MESSAGE_HANDLER mapuje zprávu systému Windows na zadanou funkci obslužné rutiny.
Libovolná funkce zadaná v makrech MESSAGE_HANDLER musí být definována takto:
LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
Mapa zpráv se před zavolání nastaví bHandled
na TRUE MessageHandler
. Pokud MessageHandler
zprávu plně nezpracuje, měla by být nastavena bHandled
na HODNOTU FALSE, aby bylo možné označit, že zpráva potřebuje další zpracování.
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Kromě MESSAGE_HANDLER můžete k mapování WM_COMMAND a WM_NOTIFY zpráv použít COMMAND_HANDLER a NOTIFY_HANDLER.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Příklad
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;
}
};
Požadavky
Hlavička: atlwin.h
MESSAGE_RANGE_HANDLER
Podobně jako MESSAGE_HANDLER, ale mapuje rozsah zpráv Systému Windows na jedinou funkci obslužné rutiny.
MESSAGE_RANGE_HANDLER( msgFirst, msgLast, func )
Parametry
msgFirst
[v] Označí začátek souvislého rozsahu zpráv.
msgLast
[v] Označí konec souvislého rozsahu zpráv.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
NOTIFY_CODE_HANDLER
Podobá se NOTIFY_HANDLER, ale mapuje WM_NOTIFY zprávu pouze na základě kódu oznámení.
NOTIFY_CODE_HANDLER(cd, func)
Parametry
cédéčko
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
NOTIFY_HANDLER
Definuje položku v mapě zpráv.
NOTIFY_HANDLER( id, cd, func )
Parametry
id
[v] Identifikátor ovládacího prvku, který zprávu odesílá.
cédéčko
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Poznámky
NOTIFY_HANDLER mapuje WM_NOTIFY zprávu na zadanou funkci obslužné rutiny na základě kódu oznámení a identifikátoru ovládacího prvku.
Libovolná funkce zadaná v makrech NOTIFY_HANDLER musí být definována takto:
LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
Mapa zpráv se před zavolání nastaví bHandled
na TRUE NotifyHandler
. Pokud NotifyHandler
zprávu plně nezpracuje, měla by být nastavena bHandled
na HODNOTU FALSE, aby bylo možné označit, že zpráva potřebuje další zpracování.
Poznámka:
Vždy zahajte mapu zpráv pomocí BEGIN_MSG_MAP. Potom můžete deklarovat další alternativní mapy zpráv pomocí ALT_MSG_MAP. Makro END_MSG_MAP označuje konec mapy zpráv. Každá mapa zpráv musí mít přesně jednu instanci BEGIN_MSG_MAP a END_MSG_MAP.
Kromě NOTIFY_HANDLER můžete pomocí MESSAGE_HANDLER mapovat WM_NOTIFY zprávu bez ohledu na identifikátor nebo kód. V tomto případě MESSAGE_HANDLER(WM_NOTIFY, OnHandlerFunction)
bude směrovat všechny WM_NOTIFY zprávy na OnHandlerFunction
.
Další informace o používání map zpráv v ATL naleznete v tématu Mapy zpráv.
Příklad
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*/);
};
Požadavky
Hlavička: atlwin.h
NOTIFY_ID_HANDLER
Podobá se NOTIFY_HANDLER, ale mapuje WM_NOTIFY zprávu pouze na základě identifikátoru ovládacího prvku.
NOTIFY_ID_HANDLER( id, func )
Parametry
id
[v] Identifikátor ovládacího prvku, který zprávu odesílá.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
NOTIFY_RANGE_CODE_HANDLER
Podobně jako NOTIFY_RANGE_HANDLER, ale mapuje WM_NOTIFY zprávy s konkrétním kódem oznámení z řady ovládacích prvků na jednu funkci obslužné rutiny.
NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
cédéčko
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Poznámky
Tato oblast je založená na identifikátoru ovládacího prvku, který zprávu odesílá.
Požadavky
Hlavička: atlwin.h
NOTIFY_RANGE_HANDLER
Podobně jako NOTIFY_HANDLER, ale mapuje WM_NOTIFY zprávy z řady ovládacích prvků na jednu funkci obslužné rutiny.
NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
func
[v] Název funkce obslužné rutiny zprávy.
Poznámky
Tato oblast je založená na identifikátoru ovládacího prvku, který zprávu odesílá.
Požadavky
Hlavička: atlwin.h
REFLECT_NOTIFICATIONS
Zobrazuje zprávy s oznámením zpět do podřízeného okna (ovládacího prvku), které je poslaly.
REFLECT_NOTIFICATIONS()
Poznámky
Toto makro zadejte jako součást mapy zpráv nadřazeného okna.
Požadavky
Hlavička: atlwin.h
REFLECTED_COMMAND_CODE_HANDLER
Podobně jako v COMMAND_CODE_HANDLER se příkazy mapuje z nadřazeného okna.
REFLECTED_COMMAND_CODE_HANDLER( code, func )
Parametry
kód
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_COMMAND_HANDLER
Podobně jako COMMAND_HANDLER, ale příkazy map se odrazí z nadřazeného okna.
REFLECTED_COMMAND_HANDLER( id, code, func )
Parametry
id
[v] Identifikátor položky nabídky, ovládacího prvku nebo akcelerátoru.
kód
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_COMMAND_ID_HANDLER
Podobně jako v COMMAND_ID_HANDLER se příkazy mapuje z nadřazeného okna.
REFLECTED_COMMAND_ID_HANDLER( id, func )
Parametry
id
[v] Identifikátor položky nabídky, ovládacího prvku nebo akcelerátoru.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_COMMAND_RANGE_CODE_HANDLER
Podobně jako u COMMAND_RANGE_CODE_HANDLER se příkazy mapuje z nadřazeného okna.
REFLECTED_COMMAND_RANGE_CODE_HANDLER( idFirst, idLast, code, func )
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
kód
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_COMMAND_RANGE_HANDLER
Podobně jako COMMAND_RANGE_HANDLER, ale příkazy map se odrazí z nadřazeného okna.
REFLECTED_COMMAND_RANGE_HANDLER( idFirst, idLast, func )
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_NOTIFY_CODE_HANDLER
Podobně jako u NOTIFY_CODE_HANDLER se oznámení mapuje z nadřazeného okna.
REFLECTED_NOTIFY_CODE_HANDLER_EX( cd, func )
Parametry
cédéčko
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_NOTIFY_HANDLER
Podobně jako u NOTIFY_HANDLER se oznámení mapuje z nadřazeného okna.
REFLECTED_NOTIFY_HANDLER( id, cd, func )
Parametry
id
[v] Identifikátor položky nabídky, ovládacího prvku nebo akcelerátoru.
cédéčko
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_NOTIFY_ID_HANDLER
Podobně jako u NOTIFY_ID_HANDLER se oznámení mapuje z nadřazeného okna.
REFLECTED_NOTIFY_ID_HANDLER( id, func )
Parametry
id
[v] Identifikátor položky nabídky, ovládacího prvku nebo akcelerátoru.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_NOTIFY_RANGE_CODE_HANDLER
Podobně jako u NOTIFY_RANGE_CODE_HANDLER se oznámení mapuje z nadřazeného okna.
REFLECTED_NOTIFY_RANGE_CODE_HANDLER( idFirst, idLast, cd, func )
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
cédéčko
[v] Kód oznámení.
func
[v] Název funkce obslužné rutiny zprávy.
Požadavky
Hlavička: atlwin.h
REFLECTED_NOTIFY_RANGE_HANDLER
Podobně jako u NOTIFY_RANGE_HANDLER se oznámení mapuje z nadřazeného okna.
REFLECTED_NOTIFY_RANGE_HANDLER( idFirst, idLast, func )
Parametry
idFirst
[v] Označí začátek souvislého rozsahu identifikátorů ovládacích prvků.
IdLast
[v] Označí konec souvislého rozsahu identifikátorů ovládacích prvků.
func
[v] Název funkce obslužné rutiny zprávy.