Obslužné rutiny pro rozsahy zpráva mapa
Tento článek vysvětluje, jak mapovat rozsah zpráv na funkci zpracování jedné zprávy (namísto mapování jednu zprávu pouze jednu funkci).
Jsou časy, kdy je potřeba zpracovat více než jedno oznámení řízení nebo zprávy stejným způsobem.V termínech možná budete chtít funkci jednotného zpracování mapovat všechny zprávy.Zpráva Mapa oblasti umožňují pro souvislý rozsah zpráv:
Lze mapovat rozsahy ID příkazu:
Funkci zpracování příkazu.
Funkci zpracování příkazu update.
Ovládací prvek oznamovací zprávy pro rozsah ID ovládacího prvku lze namapovat na funkci zpracování zprávy.
Témata v tomto článku zahrnují:
Zápis položky mapy zprávy
Deklaraci obslužné rutiny funkce
Příklad pro rozsah ID příkazu
Příklad pro rozsah ID ovládacího prvku
Zápis položky mapy zprávy
V.CPP soubor, přidat položku vaše zpráva mapy, jak ukazuje následující příklad:
ON_COMMAND_RANGE(ID_MYCMD_ONE, ID_MYCMD_TEN, &OnDoSomething)
Položka zpráva mapa se skládá z následujících položek:
Makro oblasti mapy zprávy:
Parametry do makra:
První dvě makra trvat tři parametry:
ID příkazu, který začíná rozsah
ID příkazu, který končí rozsah
Název funkce zpracování zpráv
Rozsah ID příkazu musí být souvislá.
Třetí makro ON_CONTROL_RANGE, trvá další první parametr: ovládací prvek oznámení jako EN_CHANGE.
Deklaraci obslužné rutiny funkce
Přidat své deklaraci obslužné rutiny funkce v.H souboru.Následující kód ukazuje, jak to může vypadat, jak je ukázáno níže:
public:
afx_msg void OnDoSomething(UINT nID);
Obslužné rutiny funkce pro jediného příkazy zpravidla žádné parametry.S výjimkou aktualizace obslužné rutiny funkce, funkce zpracování zprávy mapy oblastí vyžadují dodatečný parametr nID, typ UINT.Tento parametr je první parametr.Přizpůsobí dodatečný parametr ID navíc příkazu potřeba zadat příkaz, který uživatel skutečně zvolili.
Další informace o parametru požadavky pro aktualizaci obslužné rutiny funkce, viz Příklad pro příkaz ID.
Například příkaz rozsah ID
Pravděpodobně používáte rozsahy?Jedním příkladem je ve zpracování příkazů jako příkaz Lupa MFC vzorku HIERSVR.Tento příkaz přiblíží zobrazení měřítka mezi 25 % a 300 % normální velikosti.Třída HIERSVR's zobrazení používá rozsah zpracovávat příkazy Zvětšení položkou mapy zpráva připomínající toto:
ON_COMMAND_RANGE(ID_VIEW_ZOOM25, ID_VIEW_ZOOM300, &OnZoom)
Při zápisu položky mapy zprávy, zadejte:
Dva příkaz ID začíná a končí souvislý rozsah.
Here they are ID_VIEW_ZOOM25 and ID_VIEW_ZOOM300.
Název funkci zpracování příkazů.
Here it's OnZoom.
Deklarace funkce by vypadat toto:
public:
afx_msg void OnZoom(UINT nID);
V případě aktualizace obslužné rutiny funkce je podobné a mohly být více velmi užitečné.Je docela běžné zapsat ON_UPDATE_COMMAND_UI obslužné rutiny pro počet příkazů a sami písemně nebo kopírování, stejný kód opakovaně.Roztok je rozsah ID jednoho aktualizovat pomocí funkce zpracování příkazu mapovat ON_UPDATE_COMMAND_UI_RANGE makro.ID příkazu musí tvořit souvislou oblast.Příklad, naleznete OnUpdateZoom zpracování a jeho ON_UPDATE_COMMAND_UI_RANGE zpráva mapa položky v zobrazení třídy HIERSVR vzorku.
Aktualizovat funkce zpracování pro jediný příkazy zpravidla jeden parametr pCmdUI, typu CCmdUI *.Na rozdíl od funkce zpracování funkce zpracování aktualizace zprávy mapy oblastí nevyžadují dodatečný parametr nID, typ UINT.ID příkazu, které je potřeba zadat, který příkaz skutečně zvolili uživatele, naleznete CCmdUI objektu.
Příklad pro oblast řízení ID
Jiné zajímavé případ je mapování řízení oznamovací zprávy pro rozsah ID ovládacího prvku na jedinou obslužnou rutinu.Předpokládejme, že na některé z tlačítek 10 uživatel příkaz.Chcete-li mapovat jeden popisovač všechna tlačítka 10, položka zpráva mapy vypadat takto:
ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON10, OnButtonClicked)
Při psaní ON_CONTROL_RANGE makro v mapě zprávy, zadejte:
Zejména řízení oznámení.
Zde je BN_CLICKED.
ID ovládacího prvku hodnoty spojené s souvislý rozsah ovládací prvky.
Here these are IDC_BUTTON1 and IDC_BUTTON10.
Název funkci zpracování zprávy.
Here it's OnButtonClicked.
Při psaní funkci zpracování zadejte extra UINT parametru, jak je znázorněno v následující:
void CRangesView::OnButtonClicked( UINT nID )
{
int nButton = nID - IDC_BUTTON1;
ASSERT( nButton >= 0 && nButton < 10 );
// ...
}
OnButtonClicked Obslužnou rutinu pro jeden BN_CLICKED zpráva nepoužívá žádné parametry.Stejný popisovač pro oblast tlačítek má jednu UINT.Parametr navíc umožňuje identifikaci určitého ovládacího prvku, který je zodpovědný za generování BN_CLICKED zprávy.
Kód v příkladu je typické: převedení hodnoty předané int v rámci rozsahu zprávy a potvrzující, že se jedná o tento případ.Potom může trvat některé různé akce v závislosti na bylo klepnutí na tlačítko.