C++ Mfc begin_message_map()

ActiveO2

Ensign
Dabei seit
Feb. 2009
Beiträge
161
Hallo,

kann mir bitte jemand erklären wie man "BEGIN_MESSAGE_MAP()" benutzt und was es überhaupt bewirkt.
Wie ich es füllen kann, was das dann jeweils bewirkt,...
Bisher habe ich noch keine hilfreiche Beschreibung gefunden :(

Ich lese es immerwieder und es scheint mir recht nützlich zu sein, wenn man es denn versteht^^

BEGIN_MESSAGE_MAP(xxx, xxx)

ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_CLOSE()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_One, OnBnClickedButton_One)

END_MESSAGE_MAP()

Vielen Dank
 

BlackMan

Lt. Junior Grade
Dabei seit
Nov. 2004
Beiträge
360
Das ist die MFC Kapselung für die Messageloop (Windows C API).
Wie C API Geschichte funktioniert kannst du hier nachlesen:
http://msdn.microsoft.com/de-de/library/bb384843.aspx

In dem letzten dort genannten Beispiel findest du:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
.......
switch (message)
{
case WM_PAINT:
....
case WM_DESTROY:

u.s.w........................

In der MESSAGE_MAP werden die jeweils in der C API unter case WM_XXXXX: auf 'lokale' MFC/C++ Funktionen (ON_WM_XXXXX) gemappt.
(Siehe z.B. WM_PAINT).
 

IceMatrix

Lt. Commander
Dabei seit
Jan. 2008
Beiträge
1.535
nee blackman. das macro BEGIN_MESSAGE_MAP is was ganz anderes.. da wird methode mit ner datenstrunktur definiert, die beim suchen nach nem messagehandler durchgeparsed wird. unter MFC gibt ins nur eine einzige zentrale funktion WndProc, die sucht dann anhand vom window handle (hwnd) die zugehörige klasseninstanz und parsed dann deren messagemap (btw. die von ihren höheren klassen) bis sie ne übereinstimmung gefunden hat und ruft dann ggf. den handler auf.
kugg dir ma besten mal das macro selbst an. rechtsklick drauf -> go to declaration.
ist ein bisschen kompliziert, aber das kann man schon verstehen ;)
 

roker002

Commander
Dabei seit
Dez. 2007
Beiträge
2.050
lass einfach die finger davon.... wenn du Visual studio benutzt werden deine MMs automatisch erstellt. wenn man da selbst was reinschreibt kann der VS schon meckern..... bla bla, konnte nicht initialisieren. begin_m_m ist soweit ich verstanden habe, handler aufruf.
 
Top