SlideShare a Scribd company logo
1 of 11
MFC: PROGRAMARE
BAZATĂ PE EVENIMENTE
Mihail Croitor
Conținut
 Evenimente
 Prelucrarea evenimentelor
 Harta mesajelor
 Tipurile evenimentelor în MFC
 Adăugarea prelucrătorilor de evenimente în MFC
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
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
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
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
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$
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
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)
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
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

More Related Content

More from mcroitor

07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_romcroitor
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_romcroitor
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_romcroitor
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_romcroitor
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_romcroitor
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_rumcroitor
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_romcroitor
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_rumcroitor
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_romcroitor
 
01 server definition
01 server definition01 server definition
01 server definitionmcroitor
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данныхmcroitor
 
0.0 particularitatile programarii с++
0.0 particularitatile programarii с++0.0 particularitatile programarii с++
0.0 particularitatile programarii с++mcroitor
 
MySQL din linie de comanda
MySQL din linie de comandaMySQL din linie de comanda
MySQL din linie de comandamcroitor
 
создание приложений windows forms
создание приложений windows formsсоздание приложений windows forms
создание приложений windows formsmcroitor
 
основные пространства имен и классы microsoft
основные пространства имен и классы microsoftосновные пространства имен и классы microsoft
основные пространства имен и классы microsoftmcroitor
 
algoritmi stl
algoritmi stlalgoritmi stl
algoritmi stlmcroitor
 
containere stl
containere stlcontainere stl
containere stlmcroitor
 

More from mcroitor (20)

07 virtual hosts_ro
07 virtual hosts_ro07 virtual hosts_ro
07 virtual hosts_ro
 
06 php instalation_ro
06 php instalation_ro06 php instalation_ro
06 php instalation_ro
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
05 db server_deployment_ro
05 db server_deployment_ro05 db server_deployment_ro
05 db server_deployment_ro
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
04 web server_deployment_ro
04 web server_deployment_ro04 web server_deployment_ro
04 web server_deployment_ro
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
03 web server_architecture_ro
03 web server_architecture_ro03 web server_architecture_ro
03 web server_architecture_ro
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
02 server hardware_ro
02 server hardware_ro02 server hardware_ro
02 server hardware_ro
 
02 server hardware_ru
02 server hardware_ru02 server hardware_ru
02 server hardware_ru
 
01 server definition_ro
01 server definition_ro01 server definition_ro
01 server definition_ro
 
01 server definition
01 server definition01 server definition
01 server definition
 
C++ и базы данных
C++ и базы данныхC++ и базы данных
C++ и базы данных
 
0.0 particularitatile programarii с++
0.0 particularitatile programarii с++0.0 particularitatile programarii с++
0.0 particularitatile programarii с++
 
MySQL din linie de comanda
MySQL din linie de comandaMySQL din linie de comanda
MySQL din linie de comanda
 
создание приложений windows forms
создание приложений windows formsсоздание приложений windows forms
создание приложений windows forms
 
основные пространства имен и классы microsoft
основные пространства имен и классы microsoftосновные пространства имен и классы microsoft
основные пространства имен и классы microsoft
 
algoritmi stl
algoritmi stlalgoritmi stl
algoritmi stl
 
containere stl
containere stlcontainere stl
containere stl
 

MFC programare bazată pe evenimente

  • 1. MFC: PROGRAMARE BAZATĂ PE EVENIMENTE Mihail Croitor
  • 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