..::Mapa zprßv::..

slou₧φ v MFC jako nßhrada WindowProc(...) z API. To neznamenß, ₧e WindowProc v MFC neexistuje. Mapa zprßv je jenom jin² zp∙sob jak ji implementovat.
Mφsto toho, aby jste psali obrovsk² switch, si jen nadefinujete funkci, kterß se mß vykonat p°i p°ijetφ urΦitΘ zprßvy (p°ed deklaraci musφte napsat afx_msg) a do odpovφdajφcφho mφsta .cpp souboru p°idßte makro odpovφdajφcφ zprßv∞.

Nßsledujφcφ ukßzka implementuje odchycenφ WM_LBUTTONDOWN, WM_COMMAND (od polo₧ky menu s identifikßtorem ID_MENUITEM) a u₧ivatelsky definovanΘ zprßvy WM_USER+10 v tomto po°adφ.

.h soubor

class CMyView : public CView

{

...

...

...

afx_msg void OnLButtonDown(UINT, CPoint);

afx_msg void OnMenuItem( );

afx_msg LRESULT OnUser10(WPARAM, LPARAM);

...

...

...

}

.cpp soubor

Najd∞te odpovφdajφcφ Φßst cpp souboru a sem p°idejte makra (ruΦn∞ p°idanß Φßst je na zv²razn∞nΘm pozadφ)

BEGIN_MESSAGE_MAP(CMyView, CView)

//{{AFX_MSG_MAP(CMyView)

//}}AFX_MSG_MAP

Mezi p°edchozφ dva komentß°e °uΦn∞ nic nep°idßvejte, tam si p°idßvß makra ClassWizard

ON_WM_LBUTTONDDOWN()

ON_COMMAND(ID_MENUITEM, OnMenuItem)

ON_MESSAGE(WM_USER+10, OnUser10)

END_MESSAGE_MAP()

Do libovolnΘ Φßsti cpp souboru p°idejte definice funkcφ.

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)

{

// Funkce odpovφdajφcφ stisknutφ levΘho tlaΦφtka myÜi

// Zde p°idejte sv∙j k≤d

CString s;

s.Format("Bylo stisknuto tlaΦφtko na pozici X: %d, Y: %d", point.x, point.y);

MessageBox(s);

 

/* Nakonec zavolejte obsluhu tΘto zprßvy zßkladnφ t°φdy. Pokud tato obsluha d∞lß n∞co co nechcete, tak ji volat nemusφte, ale pokud vßm nezp∙sobuje ₧ßdnΘ problΘmy, tak by jste ji zavolat m∞li. Pokud se to z n∞jakΘho d∙vodu nedoporuΦuje a vytvß°φte tuto funkci pomocφ ClassWizardu, tak jste na to formou komentß°e upozorn∞ni. Zatφm jedinß zprßva, o kterΘ vφm ₧e p°φmo zakazuje volßnφ obsluhy z rodiΦovskΘ t°φdy je WM_PAINT. */

CView::OnLButtonDown(nFlags, point);

}

 

void CMyView::OnMenuItem()

{

// Funkce odpovφdajφcφ zvolenφ polo₧ky menu ID_MENUITEM

// Funkce reagujφcφ na ON_COMMAND funkci zßkladnφ t°φdy nemajφ

}

 

LRESULT CMyView::OnUser10(WPARAM wParam, LPARAM lParam)

{

// Funkce odpovφdajφcφ u₧ivatelskΘ zprßv∞ WM_USER+10

// TakΘ funkce reagujφcφ na u₧ivatelskΘ zprßvy nemajφ funkci zßkladnφ t°φdy

}

Zprßvy, odpovφdajφcφ makra a funkce s jejich parametry:

Zprßva Makro Parametry makra Funkce Nßvratovß hodnota Parametry funkce Mß funkci zßkladnφ t°φdy
Standartnφ zprßvy nap°.
WM_LBUTTONDOWN
WM_KEYDOWN
WM_CREATE
Odpovφdß jmΘnu zprßvy, jen na zaΦßtek je p°idßno ON_    nap°: ON_WM_CREATE() Nemajφ parametry Odpovφdß jmΘnu zprßvy nap°:
OnCreate
Zßvisφ na zprßv∞ Zßvisφ na zprßv∞, nap°. pro zprßvu WM_CREATE je LPCREATESTRUCT ANO
U₧ivatelskΘ zprßvy:
WM_USER + ...
ON_MESSAGE Zprßva, jmΘno funkce Se jmΘnem odpovφdajφcφm parametru makra LRESULT WPARAM, LPARAM NE
Od polo₧ek menu a akcelerßtor∙
WM_COMMAND
ON_COMMAND Identifikßtor polo₧ky menu nebo akcelerßtoru, jmΘno funkce Se jmΘnem odpovφdajφcφm parametru makra void Nemß parametry NE
Od dialogov²ch prvk∙
WM_COMMAND
Zßvisφ na notifikaΦnφm k≤du (tj. hodnot∞ HIWORD(wParam))
nap°. ON_BN_CLICKED
Identifikßtor dialogovΘho prvku, jmΘno funkce Se jmΘnem odpovφdajφcφm parametru makra void Nemß parametry NE

Pokud vßm tento zp∙sob nevyhovuje, m∙₧ete pou₧φt klasick² zp∙sob zpracovßnφ zprßv. T°φda CWnd obsahuje virtußlnφ funkci WindowProc, kterß mß ·pln∞ stejn² v²znam jako API WindowProc. LiÜφ se jen tφm ₧e ta z CWnd nemß prvnφ parametr (tj. handle okna). To je ulo₧eno jako Φlenskß prom∞nnß t°φdy CWnd::m_hWnd.