mfc programare bazată pe evenimente
DESCRIPTION
Sunt date niște repere teoretice ce descriu programare bazată pe evenimente. Se aduce caz parțial - prelucrarea evenimentelor în MFCTRANSCRIPT
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 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
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 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$
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