2. Conținut
Evenimente
Prelucrarea evenimentelor
Harta mesajelor
Tipurile evenimentelor în MFC
Adăugarea prelucrătorilor de evenimente în MFC
3. 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
4. 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
5. Prelucrarea evenimentelor:
exemplu de ciclu de evenimente
while(true)
{
// get event from queue
evt = GetEvent();
// start dispatch
switch(evt)
{
case EVENT1: DoSmth1(); break;
case EVENT2: DoSmth2(); break;
case EVENT3: DoSmth3(); break;
case EVENT4: DoSmth4(); break;
}
// end dispatch
}
Dispecerizarea
evenimentului
6. 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
7. 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 commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN,
CWinApp::OnFileOpen)
// Standard print setup command
ON_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$
8. 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
9. 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)
10. 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
11. 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