mfc programare bazată pe evenimente

11
MFC: PROGRAMARE BAZATĂ PE EVENIMENTE Mihail Croitor

Upload: mcroitor

Post on 15-Jun-2015

220 views

Category:

Education


6 download

DESCRIPTION

Sunt date niște repere teoretice ce descriu programare bazată pe evenimente. Se aduce caz parțial - prelucrarea evenimentelor în MFC

TRANSCRIPT

Page 1: MFC programare bazată pe evenimente

MFC: PROGRAMARE BAZATĂ PE EVENIMENTE

Mihail Croitor

Page 2: MFC programare bazată pe evenimente

Conținut

Evenimente Prelucrarea evenimentelor Harta mesajelor Tipurile evenimentelor în MFC Adăugarea prelucrătorilor de evenimente în MFC

Page 3: MFC programare bazată pe evenimente

Eveniment

Eveniment – o modificare a stării sistemului informatic.

Evenimentele pot fi: externe

de la utilizator de la sistem de operare

interne Noțiunea de eveniment este strâns legată cu noțiunea

de mesaj – indicator de apariție a evenimentului

Page 4: MFC programare bazată pe evenimente

Prelucrarea evenimentelor: noțiuni principale

Orice aplicație dirijată de evenimente conține: Coada de evenimente – o secvență de evenimente, pe

care aplicația trebuie să prelucreze; Prelucrători de evenimente – funcții apelate în urma

reacționării la eveniment; Ciclu de evenimente – ciclu, în care fiecare eveniment

se leagă cu funcția-prelucrator corespunzător

Page 5: MFC programare bazată pe evenimente

Prelucrarea evenimentelor:exemplu de ciclu de evenimente

while(true){// get event from queueevt = GetEvent();// start dispatchswitch(evt){case EVENT1: DoSmth1(); break;case EVENT2: DoSmth2(); break;case EVENT3: DoSmth3(); break;case EVENT4: DoSmth4(); break;}// end dispatch

}

Dispecerizarea evenimentului

Page 6: MFC programare bazată pe evenimente

Prelucrarea evenimentelor:ciclu de evenimente în MFC

while (GetMessage(&msg, (HWND) NULL, 0, 0)) {

if (TranslateAccelerator(hwndMain, haccl, &msg) == 0){

TranslateMessage(&msg);DispatchMessage(&msg);

}

}

Scoaterea evenimentului din coada

Dispecerizarea evenimentelor

Prelucrarea apasarii tastelor virtuale

Prelucrarea acceleratorilor

Page 7: MFC programare bazată pe evenimente

Prelucrarea evenimentelor:harta de mesaje

BEGIN_MESSAGE_MAP(CTrysdi2App, CWinApp)//{{AFX_MSG_MAP(CTrysdi2App)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)//}}AFX_MSG_MAP// Standard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)// Standard print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)

END_MESSAGE_MAP()Harta de mesaje leagă evenimente cu prelucrători

Macrocomenzile între//{{AFX_MSG_MAP(CTrysdi2App)Și //}}AFX_MSG_MAP Se generează de M$ V$

Page 8: MFC programare bazată pe evenimente

Tipuri de mesaje în MFC

Mesaje-comenzi – mesajele, generate de către opțiuni de meniu și acceleratori.

Mesajele sistemului de operare – mesaje de reînnoire a interfeței utilizator

Mesajele utilizatorului – mesaje, definite de utilizator

Page 9: MFC programare bazată pe evenimente

Tipuri de mesaje în MFC:mesaje-comenzi

Se definesc cu ajutorul macrocomenzii ON_COMMAND(id, pFn), unde id – identificatorul evenimentului, pFn – pointer la funcția-prelucrător.

Exemple: ON_COMMAND(ID_FILE_OPEN, OnFileOpen) ON_COMMAND_RANGE(ID_MENU1,

ID_MENU5, OnMenuSelected)

Page 10: MFC programare bazată pe evenimente

Tipuri de mesaje în MFC:mesajele SO

Reînnoirea interfeței utilizator a aplicației: ON_UPDATE_COMMAND_UI(id, pFn)

Prelucrarea evenimentelor de la elemente de control: ON_<EVENT> - unde <EVENT> - un eveniment al SO.

Exemplu: ON_BN_CLICKED(IDC_OK, OnOk) // eveniment

WM_BN_CLICKED

Page 11: MFC programare bazată pe evenimente

Tipuri de mesaje în MFC:mesajele utilizatorului

Orice mesaj (în particular, cel definit de utilizator) poate fi legat cu un prelucrător cu ajutorul macrocomenzii ON_MESSAGE(idMsg, pFn)

Identificatorul mesajului se definește prin constanta WM_USER (spațiu de identificator rezervat): #define PM_DECIMAL WM_USER + 0 #define PM_BINARY WM_USER + 1