Sunteți pe pagina 1din 36

Capitolul 9. Programare Windows.

Ierarhia de clase

Microsoft Foundation Classes (MFC)


Obiective:
s familiarizeze cu o anumit abordare i un anumit limbaj legat s familiarizeze cu o anumit abordare i un anumit limbaj legat de descrierea utilizrii ierarhiei de clase MFC n aplicaiile care de descrierea utilizrii ierarhiei de clase MFC n aplicaiile care ruleaz sub sistemul de operare Windows.. ruleaz sub sistemul de operare Windows capitolul este doar o introducere n studiul aplicaiilor Windows i capitolul este doar o introducere n studiul aplicaiilor Windows i al dezvoltrii programelor cu mediul Visual C.. al dezvoltrii programelor cu mediul Visual C prezentarea ctorva aspecte legate de forma de prezentare a prezentarea ctorva aspecte legate de forma de prezentare a aplicaiilor Windows,, de nomenclatura folosit, de cteva din aplicaiilor Windows de nomenclatura folosit, de cteva din principiile de funcionare, a ctorva clase de baz i alte exemple de principiile de funcionare, a ctorva clase de baz i alte exemple de clase din cadrul ierarhiei. clase din cadrul ierarhiei.

Sistemul de operare Windows. Interfaa API


API
o interfa grafic prietenoas i intuitiv care folosete elemente grafice sugestive (ferestre windows, de unde i denumirea sistemului de operare i icoane - icons) i convenii legate de folosirea ferestrelor i icoanelor, mai ales cu ajutorul mouse-lui. Aspectul unei aplicaii Windows tipice:
Multitasking ( rularea cvasi-simultan a mai multor programe) Multitasking ( rularea cvasi-simultan a mai multor programe) Fiecare program poate avea mai multe instane (exemplare) n rulare la un Fiecare program poate avea mai multe instane (exemplare) n rulare la un moment dat. moment dat. Un program corespunde de cele mai multe ori unei ferestre deschise pe ecran. Un program corespunde de cele mai multe ori unei ferestre deschise pe ecran. Comutarea ntre programe poate fi determinat de focalizarea pe o anumit Comutarea ntre programe poate fi determinat de focalizarea pe o anumit fereastr, n general prin clic cu mouse-ul pe fereastra dorit. fereastr, n general prin clic cu mouse-ul pe fereastra dorit. O fereastr a unei aplicaii cuprinde: meniul principal, toolbar (bara de O fereastr a unei aplicaii cuprinde: meniul principal, toolbar (bara de instrumente), mai multe ferestre document (pentru o interfa MDI )) eventual cu instrumente), mai multe ferestre document (pentru o interfa MDI eventual cu scroll bar (bar de derulare), title bar (bara de titlu), butoane de maximizare, scroll bar (bar de derulare), title bar (bara de titlu), butoane de maximizare, minimizare i nchidere, status bar (bara de stare) minimizare i nchidere, status bar (bara de stare)
are

Sistemul de operare Windows. Interfaa API (continuare 1)


Title bar (bara de titlu) Toolbar (bara de unelte) Meniul principal Scroll bar (Bara de defilare) nchiderea ferestrei Maximizare Minimizare

Mai multe documente deschise

Status bar (bara de stare)

Civa termeni specifici

Arhitectura document-view - separarea coninutului unui fiier (document) de forma de afiare a acestui coninut (view); fiecrei vizualizri (view) i corespunde cte o clas; orice modificare ntr-o

vizualizare este transmis clasei document i astfel informaia este actualizat, indiferent de vizualizarea activ la un moment dat SDI interfa uni-document - modalitate de definire a interfeei aplicaiei cu utilizatorul, care nu permite dect deschiderea unui singur document (adic a unui fiier coninnd informaie relevant pentru afiare i prelucrare) i n consecin a unei singure ferestre de vizualizare corespondente acestui document. MDI Multiple-Document Interface - interfa multidocument, care presupune posibilitatea deschiderii simultane a mai multor documente, cu vizualizrile corespunztoare; fereastra principal se va numi fereastr printe (parent) iar ferestrele de vizualizare vor fi denumite ferestre copil (child); Fereastr modal/nemodal - o fereastr este modal dac nu permite focalizarea pe alt fereastr dect dup nchiderea sa; o fereastr nemodal permite trecerea la o alt fereastr prin clic pe aceasta, chiar dac fereastra iniial nu e nchis.

Civa termeni specifici (continuare 1)

GDI- Graphical Device Interface (Interfa Grafic cu Dispozitivele);

Windows pune la dispoziia utilizatorului o varietate de instrumente de desenare (s. ex.penie, pensule, fonturi); MFC furnizeaz clase pentru obiecte grafice echivalente cu aceste instrumente de desenare Windows, iar acestea se numesc tipuri de manipulare ale GDI Scroll defilare sau derulare - deplasarea coninutului unei ferestre, susjos sau stnga-dreapta, folosind o bar cu sgei cu un aspect specific, ataat ferestrei respective Fir de execuie unitatea de execuie a unui proces (instan n execuie a unei aplicaii); fiecare fir de execuie are asociate o secven de instruciuni, un set de regitri i o stiv; un proces nu execut nici un fel de instruciuni, ci este un spaiu de adresare comun pentru unul sau mai multe fire de execuie, execuia instruciunilor cznd n responsabilitatea acestora. Control obiect vizual cu o comportare bine definit (s. ex. o fereastr de editare Text Box - care permite introducerea unui ir de caractere, sau o cutie de selecie Combo Box care permite alegerea unui element dintr-o list derulant).

INTERFATA API
aplicaiilor) const din funciile, mesajele, structurile de date, tipurile de date i instruciunile care pot fi utilizate pentru a crea aplicaii care ruleaz sub Windows; este de fapt o bibliotec de funcii grupate n modulul Win16 (la Windows 3.1 sau Windows 3.11 Win16 deci pe 16 bii) sau n Win32 (pentru Windows95 sau Windows NT deci pe 32 bii); cea mai des utilizatparte a interfeei API o reprezint elementele de cod care permit apelarea din mediul Windows a funciilor API: declaraii ale funciilor API tipuri definite de utilizator, pentru structurile de date transferate ca parametri acestor funcii constante, pentru valorile transferate i returnate de aceste funcii.

Application Programming Interface (interfa de programare a

INTERFATA API (continuare 1)


caracteristicile de interfa, comune tuturor aplicaiilor Windows : caracteristicile de interfa,

tot ceea ce afieaz o aplicaie pe ecran este cuprins n spaiul ferestrei sale, pe care utilizatorul o poate deplasa i redimensiona (de cele mai multe ori); interaciunea utilizatorului cu o aplicaie se efectueaz prin intermediul unor obiecte grafice afiate pe suprafaa ferestrei aplicaiei pot fi executate simultan mai multe instane ale aceleiai aplicaii, fiecare instan avnd propria sa fereastr de aplicaie.

INTERFATA API (continuare 2)


Funcionarea unei aplicaii Windows: operaiile de intrare constituie evenimente, pe care sistemul Windows le recepioneaz i le transform n mesaje. Windows formeaz mesaje care se adreseaz tuturor aplicaiilor care se execut (cvasi) simultan. Mesajele sunt memorate iniial n coada de mesaje a sistemului de unde sunt copiate n cozile de mesaje ale aplicaiilor; coada de mesaje a unei aplicaii conine mesaje pentru toate instanele aplicaiei (pentru toate ferestrele n care se execut aplicaia). Mesajele sunt extrase de aplicaie prin intermediul apelului unei funcii a sistemului, apoi sunt transmise tot prin intermediul sistemului, unei funcii speciale, numit funcia fereastr a aplicaiei (prelucreaz mesajele adresate tuturor instanelor curente ale aplicaiei i este asociat tuturor ferestrelor n care se execut instane ale aplicaiei)

INTERFATA API (continuare 3)


Funcia fereastr poate fi o component a programului de aplicaie sau un modul dintr-o bibliotec cu legare dinamic (DLL) i nu poate fi apelat direct de programul de aplicaie: programul solicit execuia funciei fereastr apelnd o funcie special a sistemului Windows, la fiecare apel, funcia fereastr efectund o prelucrare specific mesajului primit sau neglijeaz mesajul i apoi red controlul sistemului Windows. Pentru preluarea mesajelor din coada de mesaje a aplicaiei, se prevede n program bucla de mesaje. Ea este situat, de regul, n funcia care conine punctul de intrare n program -

WinMain:

while { }

(GetMessage(&msg, NULL, 0,0)) TranslateMessage (&msg); DispatchMesssage (&msg);

INTERFATA API (continuare 4)


Rolul celor 3 funcii : GetMessage (lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax)
Extrage un mesaj din coada de mesaje a aplicaiei i-l memoreaz n lpMsg. Extrage un mesaj din coada de mesaje a aplicaiei i-l memoreaz n lpMsg. ntoarce valoarea zero atunci cnd mesajul extras este cel de terminare a execuiei ntoarce valoarea zero atunci cnd mesajul extras este cel de terminare a execuiei aplicaiei (WM_QUIT); dac la momentul apelului coada de mesaje era vid, aplicaiei (WM_QUIT); dac la momentul apelului coada de mesaje era vid, funcia ateapt intrarea unui mesaj n coada; hWnd indic fereastra de la care funcia ateapt intrarea unui mesaj n coada; hWnd indic fereastra de la care programul ateapt ca funcia s ntoarc mesaje; Ultimii doi parametri limiteaz programul ateapt ca funcia s ntoarc mesaje; Ultimii doi parametri limiteaz gama mesajelor ntoarse de funcie, prin valoarea minim i valoarea maxim a gama mesajelor ntoarse de funcie, prin valoarea minim i valoarea maxim a identificatorilor de mesaje. identificatorilor de mesaje.

TranslateMessasge (lpMsg)
Prelucreaz mesajele provenind de la tastatur, aducndu-le la o form mai uor de Prelucreaz mesajele provenind de la tastatur, aducndu-le la o form mai uor de prelucrat n funcia fereastr. prelucrat n funcia fereastr.

DispatchMessasge (lpMsg)
Apeleaz funcia fereastr, transmindu-i ca parametru mesajul; se iese din funcie Apeleaz funcia fereastr, transmindu-i ca parametru mesajul; se iese din funcie la terminarea execuiei funciei fereastr. la terminarea execuiei funciei fereastr.

Obs. :: unele mesaje sunt transmise de Windows direct aplicaiei (generate la apelul unor Obs. unele mesaje sunt transmise de Windows direct aplicaiei (generate la apelul unor funcii ale sistemului, de ctre aplicaie sau chiar de funcia fereastr);; exemple: funcii ale sistemului, de ctre aplicaie sau chiar de funcia fereastr) exemple:
mesajele de creare a unei ferestre (WM_CREATE), redimensionare (WM_SIZE) i mesajele de creare a unei ferestre (WM_CREATE), redimensionare (WM_SIZE) i afiare a unei ferestre (WM_SHOW). afiare a unei ferestre (WM_SHOW).

Facilitile oferite de MFC


suport complet pentru toate funciile Windows, controale mesaje, primitive grafice, meniuri i ferestre de dialog; folosirea acelorai convenii de nume ca la Windows API; eliminarea folosirii instruciunilor switch/case ca o surs frecvent de erori. Toate mesajele sunt mapate spre funciile membre dintr-o clas. un mai bun suport pentru diagnosticare prin posibilitatea de a transmite informaii despre obiecte spre fiiere un concept extins de manipulare a excepiilor ceea ce face codul mai puin expus la cderi (spre exemplu este inclus suport pentru tratarea cazului de memorie insuficient (out of memory) i alte erori); determinarea tipului unui obiect-dat la rulare; cod mic cu o implementare rapid. Foundation Class Library adaug doar un mic adaus de cod obiect i care se execut aproape la fel de repede ca aplicaiile Windows tradiionale scrise n C. scrise n

Scurt privire asupra unei aplicaii Windows cu MFC


Sub mediul de programare Visual C++ se contruiete scheletul unei aplicaii folosind instrumentul ncorporat Application Wizard: Prima clas (mama tuturor claselor) - CObject, multe din clasele MFC motenind comportamentul i posibilitile acestei clase; aceast clas d altor clase posibilitatea de serializare proprie (care permite claselor s-i citeasc i s-i scrie propriul cod n i din fiiere) prin intermediul clasei CArchive; CObject permite determinarea tipului unei clase n timpul rulrii, cu metodele GetRunTimeClas() si IsKindOf(). Obiectul Aplicatie se definete prin CWinApp. Fiecare aplicaie poate conine o singur clas derivat din CWinApp - global. n Visual C++, CWinApp motenete clasa CWinThread, care definete firul de execuie al unui program. Toate aplicaiile au initial un fir principal de execuie. Clasa CWinThread permite crearea a noi fire de execuie.

Scurt privire asupra unei aplicaii Windows cu MFC (continuare 1)


aplicaie orientat document; furnizeaz funciile de baz pentru toate documentele (crearea, ncrcarea i salvarea documentelor); utilizatorul nu modific direct documentul ci folosete o vizualizare pentru a comunica documentului modificrile fcute. Vizualizrile tiu crui document i sunt ataate, iar documentele tiu ce vizualizri sunt active.

CDocument - clasa de baz folosit de orice document creat de o

abstract, nefolosit direct. abloanele de document se definesc ca descendeni ai clasei CDocTemplate. MFC folosete abloanele de document pentru a defini relaiile dintre o clas document (descendent din CDocument), o clas de vizualizare (descendent din CView sau alte clase de vizualizare) i o clas cadru de fereastr (care conine vizualizarea). Trebuie creat un ablon de document pentru fiecare tip de document din aplicaie.

CDocTemplate definete abloanele document, fiind o clas de baz

Scurt privire asupra unei aplicaii Windows cu MFC (continuare 2)


celelalte clase de vizualizare:

CView gestioneaz vizualizrile, fiind clasa de baz pentru toate

CScrollView (pentru defilarea ferestrei cu ajutorul barelor de defilare), CScrollView (pentru defilarea ferestrei cu ajutorul barelor de defilare), CEditView care stie s fac editare de text cu Cut, Copy, Paste, CEditView care stie s fac editare de text cu Cut, Copy, Paste, CFormView care conine controalele. CFormView care conine controalele.

Atunci cnd un utilizator interacioneaz cu aplicaia, vizualizrile deseneaz pe ecran ceea ce vede utilizatorul. Dac utilizatorul modific coninutul ferestrei, programul comunic aceste modificri clasei document, astfel nct aceasta s se poat actualiza. Documentul reprezint datele brute cu care lucreaz o aplicaie, iar vizualizrile afieaz coninutul documentului, sub o form oarecare. Dei se pot atasa mai multe vizualizri unui document, numai una din ele poate fi folosit la un moment dat.

Scurt privire asupra unei aplicaii Windows cu MFC (continuare 3)


CWnd i CFrameWnd - pentru crearea i gestionarea ferestrelor: astfel, CWnd conine funcii membru care manevreaz apelurile API asociate de obicei unei ferestre, iar un obiect CFrameWnd (care moteneste CWnd) conine de obicei vizualizri. Obiectele CFrameWnd recunosc vizualizrile i pot realiza functionalitile de care depind acestea, spre exemplu actualizarea meniurilor i a barelor cu instrumente. Dac CFrameWnd este fereastra principal a aplicaiei aceasta se termin automat la selectarea nchiderii ferestrei. CArchive i CFile permit manevrarea operaiilor de intrare/ieire din fiiere. CArchive gestioneaz o stiv de arhivare i furnizeaz claselor o modalitate de a-i scrie i citi propriul continut n i dintr-un fiier. CFile realizeaz operaii binare de I/O direct cu fiierele de pe disc. De obicei, se creeaz un obiect CFile i se ataeaz un obiect CArchive. Fiecare fiier deschis poate avea un singur obiect CArchive. singur obiect

Ierarhia MFC

Prezentarea celor mai importante clase din MFC


Biblioteci ca MFC ncep de obicei cu cteva clase printe. Clasele adiionale sunt derivate din clasele printe. CObject este una din clasele printe utilizat intensiv n dezvoltarea aplicaiilor Windows. CObject este definit n fiierul header afx.h . CObject ofer testare normal respectiv dinamic a tipului i serializare; testarea dinamic a tipului presupune c tipul obiectului este determinat n timpul rulrii. Starea obiectului poate fi salvat pe un mediu de stocare ca de exemplu un disc, printr-un concept numit persisten. CGdiObject este un exemplu de clas derivat din CObject. CGdiObject i funciile lui membre permite entitilor precum creioane grafice, pensule i fonturi s fie create i folosite n aplicaii Windows.

Prezentarea celor mai importante clase din MFC (continuare 1)


Un exemplu de folosire a unei clase MFC, prezentat n contrast fa de programele tradiionale Windows: n programele tradiionale scrise n C pentru Windows, funcia DeleteObject() este apelat astfel:
DeleteObject(hBRUSH); DeleteObject(hBRUSH); /*hBRUSH este un handler pentru /*hBRUSH este un handler pentru

pensula grafica */ pensula grafica

n C++ cu MFC acelai rezultat va fi obinut accesnd funcia membr n felul urmtor:
newbrush.DeleteObject); // newbrush este pensula newbrush.DeleteObject); // newbrush este pensula // grafica curenta // grafica curenta

Prezentarea celor mai importante clase din MFC (continuare 2)


pentru comportamentul de baz al aplicaiilor Windows. Aceast clas manevreaz mesaje Windows; ncapsuleaz iniializarea, rularea i terminarea unei aplicaii Windows. O aplicaie construit n spaiul de lucru trebuie s aib un obiect al unei clase trebuie s derivate din CWinApp. Acest obiect este construit nainte ca fereastra s fie din creat.
Ca orice program Windows, aplicaia are o funcie WinMain. ntr-o aplicaie creat cu Ca orice program Windows, aplicaia are o funcie WinMain. ntr-o aplicaie creat cu mediul de lucru Visual C++, oricum nu se scrie funcia WinMain. Aceasta este mediul de lucru Visual C++, oricum nu se scrie funcia WinMain Aceasta este WinMain. nlocuit de biblioteca de clase i este apelat la pornirea aplicaiei. WinMain nlocuit de biblioteca de clase i este apelat la pornirea aplicaiei. WinMain realizeaz servicii standard ca nregistrarea claselor fereastr. Apoi aceasta apeleaz realizeaz servicii standard ca nregistrarea claselor fereastr. Apoi aceasta apeleaz funcii membre ale obiectului aplicaie pentru a iniializa i rula aplicaia. Pentru a funcii membre ale obiectului aplicaie pentru a iniializa i rula aplicaia. Pentru a iniializa aplicaia, WinMain apeleaz funciile membre InitApplication i InitInstance iniializa aplicaia, WinMain apeleaz funciile membre InitApplication i InitInstance ale obiectului aplicaie. Pentru a rula bucla de mesaje a aplicaiei, WinMain apeleaz ale obiectului aplicaie. Pentru a rula bucla de mesaje a aplicaiei, WinMain apeleaz funcia membr Run. La terminare WinMain apeleaz funcia membr ExitInstance. funcia membr Run. La terminare WinMain apeleaz funcia membr ExitInstance.
Clasa CWinApp conine funcii specifice

Prezentarea celor mai importante clase din MFC (continuare 3)


Pentru crearea unei aplicaii n Visual C++ se folosete de obicei instrumentul AppWizard care permite realizarea rapid a unui schelet al aplicaiei dorite. Cnd se creeaz un astfel de schelet de aplicaie cu AppWizard acesta declar o clas aplicaie derivat din CWinApp. AppWizard genereaz de asemenea un fiier implementare care conine urmtoarele:
o hart de mesaje pentru clasa aplicaie o hart de mesaje pentru clasa aplicaie un constructor al clasei un constructor al clasei o variabil care declar un singur obiect al clasei o variabil care declar un singur obiect al clasei o implementare standard a funciei membre InitInstance o implementare standard a funciei membre InitInstance

Clasa aplicaie este plasat n header-ul proiectului i n fiierul surs principal. Numele claselor i a fiierelor create sunt bazate pe numele proiectului dat n AppWizard. Cea mai simpl modalitate de a vedea codul pentru aceste clase este prin intermediul utilitarului ClassView din mediul Visual C++.

Prezentarea celor mai importante clase din MFC (continuare 4)


conine funciile pentru afiarea i mutarea ferestrelor. Este folosit de aproape toate clasele care afieaz ceva pe ecran (s. ex. casete de dialog, controale). CWnd manevreaz comenzile primite de la utilizatori. Este derivat din: CCmdTarget - este clasa de baz pentru arhitectura de mesaje a MFC. O hart de mesaje transmite comenzi i mesaje la funciile membre care sunt scrise pentru a le manipula. O comand este un mesaj de la o opiune de pentru a le manipula. O comand meniu, buton de comand sau tast accelerator.
Clasele derivate din CCmdTarget sunt CView, CWinApp, CDocument, CWnd i Clasele derivate din CCmdTarget sunt CView, CWinApp, CDocument, CWnd i CFrameWnd. Dac se dorete ca o nou clas s interpreteze mesajele Windows se va CFrameWnd. Dac se dorete ca o nou clas s interpreteze mesajele Windows se va deriva clasa din una din clasele derivate din CCmdTarget sau direct din aceasta. deriva clasa din una din clasele derivate din CCmdTarget sau direct din aceasta.
Clasa CWnd

CWnd i mecanismul hart de mesaje ascunde funcia WndProc. Mesajele Windows sunt transmise automat prin harta de mesaje la funcia OnMessage. Funcia membr OnMessage se poate suprascrie pentru a prelucra un mesaj particular n clasa derivat.
Obs.: Clasa CWnd permite de asemenea crearea unei fereastre child pentru Obs.: Clasa CWnd permite de asemenea crearea unei fereastre child pentru aplicaie. aplicaie.

Clasa

Prezentarea celor mai importante clase din MFC (continuare 5)


furnizeaz funcionalitatea de baz pentru clase document definite de utilizator. Un document reprezint colecia de date pe care utilizatorul o acceseaz cu o comand File Open i o salveaz cu o comand File Save. Utilizatorul interacioneaz cu un document prin obiectul CView asociat cu el. O vizualizare afieaz o imagine a documentului ntr-un cadru fereastr i interpreteaz intrarea de la utilizator ca operaii asupra documentului. Un document poate avea multiple vizualizri asociate cu el. Cnd utilizatorul deschide o fereastr a documentului, mediul de lucru creeaz o vizualizare i o ataeaz documentului. Cnd o dat document este modificat, fiecare din vizualizri trebuie s reflecte aceste modificri. CDocument furnizeaz funcia membr CDocument furnizeaz funcia membr
UpdateAllViews pentru ca s notifice vizualizrilor aceste schimbri astfel ca UpdateAllViews pentru ca s notifice vizualizrilor aceste schimbri astfel ca vizualizrile s se poat redesena dac e necesar. vizualizrile s se poat redesena dac e necesar.
Clasa CDocument

Prezentarea celor mai importante clase din MFC (continuare 6)


Pentru a implementa documente ntr-o aplicaie tipic, trebuie executate operaiile: Se deriveaz o clas din CDocument pentru fiecare tip de document. Se adaug variabile membre pentru a stoca fiecare dat document. Se implementeaz funcii membre pentru citirea i modificarea datelor document. Vizualizrile documentului sunt cele mai importante utilizatoare ale acestor funcii membre. Se suprascrie funcia membr CObject :: Serialize n clasa document pentru a scrie i citi date document pe i de pe disc.

Prezentarea celor mai importante clase din MFC (continuare 7)

baz pentru template-uri document. Un template document definete relaiile ntre trei tipuri de clase :

Clasa CDocTemplate este o clas abstract care definete funcionalitatea de

o clas document care este derivat din CDocument o clas document care este derivat din CDocument o clas vizualizare, care afeaz datele din clasa document. Se poate deriva o clas vizualizare, care afeaz datele din clasa document. Se poate deriva aceast clas din CView, CScrollView, CFormView sau CEditView. Se poate aceast clas din CView, CScrollView, CFormView sau CEditView. Se poate folosi n acest scop CEditView direct. folosi n acest scop CEditView direct. o clas cadru (frame) fereastr, care conine vizualizarea. Pentru o interfa o clas cadru (frame) fereastr, care conine vizualizarea. Pentru o interfa monodocument (Single Document Interface - SDI) aceast clas se poate deriva monodocument (Single Document Interface - SDI) aceast clas se poate deriva dim CFrameWnd. Pentru o interfa multidocument se poate deriva clasa din dim CFrameWnd. Pentru o interfa multidocument se poate deriva clasa din CMDIChildWnd. Dac se dorete s se particularizeze stilul trebuie s se utilizeze CMDIChildWnd. Dac se dorete s se particularizeze stilul trebuie s se utilizeze direct CFrameWnd sau CMDIChildWnd fr s se deriveze propriile clase. direct CFrameWnd sau CMDIChildWnd fr s se deriveze propriile clase.

Prezentarea celor mai importante clase din MFC (continuare 8)


(view) definite de utilizator. O vizualizare este ataat unui document i se comport ca un intermediar ntre document i utilizator: vizualizarea trimite imaginea documentului pe ecran sau imprimant i interpreteaz intrrile de la utilizator ca operaii asupra documentului. O vizualizare este un child al unui cadru fereastr. Mai multe vizualizri pot s mpart un cadru fereastr, ca n cazul ferestrei split (despicat, adic alctuit din mai multe seciuni, ca o fereastr cu mai multe ochiuri de geam).
Pentru a utiliza CView se deriveaz o clas din aceasta i se implementeaz Pentru a utiliza CView se deriveaz o clas din aceasta i se implementeaz funcia membr OnDraw pentru a realiza afiarea pe ecran. Se poate utiliza funcia membr OnDraw pentru a realiza afiarea pe ecran. Se poate utiliza OnDraw pentru a realiza tiprirea i vizualizarea naintea tipririi (print OnDraw pentru a realiza tiprirea i vizualizarea naintea tipririi (print preview). Mediul de lucru manipuleaz bucla de tiprire pentru a tipri i preview). Mediul de lucru manipuleaz bucla de tiprire pentru a tipri i previzualiza documentul previzualiza documentul
Clasa CView furnizeaz funcionalitatea de baz pentru clasele de vizualizare

Prezentarea celor mai importante clase din MFC (continuare 9)


MFC furnizeaz nou clase derivate din CView:
CCtrlView permite utilizarea arhitecturii document-view cu arbori, liste i controale CCtrlView permite utilizarea arhitecturii document-view cu arbori, liste i controale de editare. de editare. CDaoView afieaz nregistrrile unei baze de date n cutii de CDaoView afieaz nregistrrile unei baze de date n cutii de dialog. dialog. CEditView furnizeaz un editor simplu multilinie. Se poate utiliza un obiect CEditView furnizeaz un editor simplu multilinie. Se poate utiliza un obiect CEditView ca un control ntr-o cutie de dialog. CEditView ca un control ntr-o cutie de dialog. CFormView permite derularea (cu scroll bar), care conine controale pentru cutii CFormView permite derularea (cu scroll bar), care conine controale pentru cutii de dialog i este bazat pe un template dialog n fiierul de resurse. de dialog i este bazat pe un template dialog n fiierul de resurse. CListView permite utilizarea arhitecturii document-view cu controale de tip list. CListView permite utilizarea arhitecturii document-view cu controale de tip list. CRecordView afieaz nregistrri dintr-o baz de date ntr-o cutie de dialog CRecordView afieaz nregistrri dintr-o baz de date ntr-o cutie de dialog CRichEditView permite utilizarea arhitecturii document-view cu controale CRichEditView permite utilizarea arhitecturii document-view cu controale rich edit (care permit manipularea fiierelor n format rich text - *.rtf care pot fi rich edit (care permit manipularea fiierelor n format rich text - *.rtf care pot fi direct editate cu editorul Word) direct editate cu editorul Word) CScrollView, o vizualizare care permite suport scroll automat CScrollView, o vizualizare care permite suport scroll automat CTreeView, o vizualizare care permite utilizarea arhitecturii document-view cu CTreeView, o vizualizare care permite utilizarea arhitecturii document-view cu controale de tip arbore (ca n utilitarul Explorer din Windows) controale de tip arbore (ca n utilitarul Explorer din Windows)

Prezentarea celor mai importante clase din MFC (continuare 10)


CFrameWnd determin funcionalitatea unei interfee unidocument (SDI). Pentru a crea o fereastr cadru se deriveaz o clas din CFrameWnd. Se adaug variabile membru la clasa derivat pentru a stoca date specifice la aplicaiei. Se implementeaz o funcie membru handler de mesaje i o hart de mesaje n clasa derivat pentru a specifica ce se ntmpl cnd mesajele sunt direcionate spre fereastr. Clasa CDialog este derivat din CWnd. O cutie de dialog este un tip special de fereastr. Pentru a crea o cutie de dialog se deriveaz o clas din CDialog sau se folosete una din clasele pentru cutii de dialog standard ca deschidere de dialog standard ca deschidere sau salvare n fiier, tiprire, selecie de culori sau fonturi, operaii de cutare i nlocuire sau pentru operaii OLE. CDialog este clasa de baz pentru toate cutiile de dialog modale sau nemodale. CDataExchange realizeaz schimbul de date i valideaz informaiile pentru cutii de dialog. Pentru crearea unei ferestre de dialog se crearea unei ferestre de dialog se folosesc metodele Create pentru ferestre nemodale sau DoModal pentru ferestre modale.
Clasa

Prezentarea celor mai importante clase din MFC (continuare 11)


CButton furnizeaz funcionalitate controalelor buton. Un control buton este o mic fereastr child rectangular care poate fi determinat prin click cu mouse-ul sau prin tastarea ENTER s parcurg alternativ strile apsat/eliberat (sau pornit/stins). Un buton de obicei i schimb aspectul cnd utilizatorul apas pe el.
Clasa

Tipuri :: check box, radio button i pushbutton (in functie de stilul butonului Tipuri check box, radio button i pushbutton (in functie de stilul butonului specificat la iniializare de funcia membr Create). specificat la iniializare de funcia membr Create).

CBitmapButton derivat din CButton permite crearea butoanelor control cu imagine bitmap ca etichet n loc de text. Un buton CBitmapButton poate avea bitmap-uri separate pentru strile butonului: ridicat, apsat, indicat(focused) i dezactivat.
Clasa

Prezentarea celor mai importante clase din MFC (continuare 12)


Exemplificare pentru harta de mesaje: Fiecare intrare hart de mesaje are urmtoarea form:
ON_Notification(id, funcie_membr) ON_Notification(id, funcie_membr)

unde id specific identificatorul ferestrei child al controlului care transmite unde id specific identificatorul ferestrei child al controlului care transmite notificarea, iar funcie_membr este numele funciei membr a clasei printe notificarea, iar funcie_membr este numele funciei membr a clasei printe care va prelucra notificarea. care va prelucra notificarea.

Prototipul funciei clasei printe este :


afx_msg void funcie_membr() afx_msg void funcie_membr()

Eventualele intrri hart de mesaje sunt urmtoarele : Intrare hart mesaj Trimis ctre clasa printe cnd ON_BN_CLICKED Utilizatorul apas un buton ON_BN_DOUBLECLICKED Utilizatorul face un dublu-clic pe

Prezentarea celor mai importante clase din MFC (continuare 13)


Clasa CListBox

furnizeaz funcionalitatea pentru un list box. Un control list box afieaz o list de entiti ca fiierele dintr-un director spre exemplu, pe care utilizatorul le poate vedea i selecta. Lista de intrri hart de mesaje:
ON_LBN_DBLCLK: Utilizatorul face un dublu-clic pe un ir de caractere ntr-o list. ON_LBN_DBLCLK: Utilizatorul face un dublu-clic pe un ir de caractere ntr-o list. Numai o list care are silul LBS_NOTIFY va trimite acest mesaj de notificare. Numai o list care are silul LBS_NOTIFY va trimite acest mesaj de notificare. ON_LBN_ERRSPACE: Controlul list box nu poate aloca destul memorie pentru a realiza ON_LBN_ERRSPACE: Controlul list box nu poate aloca destul memorie pentru a realiza cererea. cererea. ON_LBN_KILLFOCUS: List box a pierdut fluxul de intrare. ON_LBN_KILLFOCUS: List box a pierdut fluxul de intrare. ON_LBN_SELCANCEL: Selecia curent a list box este dezactivat. Acest mesaj este ON_LBN_SELCANCEL: Selecia curent a list box este dezactivat. Acest mesaj este trimis doar cnd o list are silul LBS_NOTIFY. trimis doar cnd o list are silul LBS_NOTIFY. ON_LBN_SELCHANGE: Selecia n fereastra de dialog este pe cale s fie schimbat. ON_LBN_SELCHANGE: Selecia n fereastra de dialog este pe cale s fie schimbat. Aceast notificare nu este trimis dac selecia este schimbat de funcia membr Aceast notificare nu este trimis dac selecia este schimbat de funcia membr CListBox::SetCurSel. Notificarea se aplic doar unei list box care are stilul LBS_NOTIFY. CListBox::SetCurSel. Notificarea se aplic doar unei list box care are stilul LBS_NOTIFY. Mesajul de notificare LBN_SELCHANGE este trimis pentru o list cu selecie multipl, Mesajul de notificare LBN_SELCHANGE este trimis pentru o list cu selecie multipl, atunci cnd utilizatorul apas o tast sgeat, chiar dac selecia nu se schimb. atunci cnd utilizatorul apas o tast sgeat, chiar dac selecia nu se schimb. ON_LBN_SETFOCUS: Fereastra list recepioneaz fluxul de intrare. ON_LBN_SETFOCUS: Fereastra list recepioneaz fluxul de intrare. ON_WM_CHARTOITEM: O list owner-draw care nu are nici un ir recepioneaz un ON_WM_CHARTOITEM: O list owner-draw care nu are nici un ir recepioneaz un mesaj WM_CHAR. mesaj WM_CHAR. ON_WM_VKEZTOITEM: O list cu stilul LBS_WANTKEYBOARDINPUT ON_WM_VKEZTOITEM: O list cu stilul LBS_WANTKEYBOARDINPUT recepioneaz un mesaj WM_KEYDOWN. recepioneaz un mesaj WM_KEYDOWN.

Prezentarea celor mai importante clase din MFC (continuare 14)


este un list box combinat fie cu un control static, fie cu un control de editare. Poriunea list box a controlului va fi afiat cnd utilizatorul selecteaz butonul cu sgeat. Clasa CScrollBar ofer funcionalitate unui control scroll-bar. Se poate crea un control scroll-bar n doi pai. Mai nti se apeleaz constructorul CScrollBar pentru a construi obiectul CScrollBar, apoi se apeleaz funcia membr Create pentru a crea controlul scroll-bar i a-l ataa obiectului CScrollBar. Clasa CStatic furnizeaz funcionalitatea unui control static. Un control static afieaz un text, dreptunghi, icon, cursor, bitmap sau metafiier (Windows Metafile - *.wmf). El poate fi folosit la etichete, cutii de text sau alte controale separate.
Un obiect CStatic se creeaz n doi pai. Mai nti se apeleaz constructorul pentru a Un obiect CStatic se creeaz n doi pai. Mai nti se apeleaz constructorul pentru a construi obiectul CStatic, apoi se apeleaz funcia membr Create pentru a crea controlul construi obiectul CStatic, apoi se apeleaz funcia membr Create pentru a crea controlul static i a-l ataa la obiectul CStatic. static i a-l ataa la obiectul CStatic.
Clasa CComboBox furnizeaz funcionalitate unui combo box. Un combo box

Prezentarea celor mai importante clase din MFC (continuare 15)


CDC definete o clas a unui obiect context-dispozitiv. Un obiect CDC furnizeaz funcii membre pentru lucrul cu contexte dispozitiv ca display sau imprimanti funcii pentru lucrul cu un context de afiare asociat cu regiunea curent a unei ferestre. Toate operaiile de desenare se realizeaz prin intermediul funciilor membre ale unui obiect CDC. Clasa CDC furnizeaz funcii membre pentru operaii context-dispozitiv, lucrul cu unelte de desenare, selecie de obiecte GDI i lucrul cu culori i palete. De asemenea furnizeaz funcii membre pentru obinerea i setarea atributelor de desenare, mappare, conversii de coordonate, lucrul cu regiuni, clipping (decuparea unor poriuni de imagine), desenare de linii i desenare de forme simple, elipse i poligoane. Clasa are funcii membre pentru a afia text, lucru cu fonturile, utilizarea instruciunilor pentru imprimant, derularea (scroll) i redarea (scroll) metafiierelor.
Clasa

Prezentarea celor mai importante clase din MFC (continuare 16)


utilizri specifice biblioteca MFC furnizeaz cteva clase derivate din CDC. CPaintDC ncapsuleaz apelul lui BeginPaint i EndPaint. CClientDC manipuleaz un context de afiare cu o zon client a fereastrei. CWindowDC manipuleaz un context de afiare asociat cu o ntreag fereastr. CMetaFileDC asociaz un context dispozitiv cu un metafiier. Clasa CBitmap ncapsuleaz un GDI bitmap i furnizeaz funcii membre pentru a manipula bitmap-ul.. GDI brush (pensul grafic). Pentru a utiliza un obiect CBrush, se construiete un obiect CBrush i se trimite ca parametru oricrei funcii care are nevoie acesta. Pensulele pot fi solide, haurate sau create dup model (patterned). Clasa CFont ncapsuleaz un font GDI i furnizeaz funcii membre pentru Clasa CFont manipularea fonturilor (caracterelor).
Clasa CBrush ncapsuleaz un Pentru

Clasa CPen ncapsuleaz un creion (pen) GDI.

Prezentarea celor mai importante clase din MFC (continuare 17)


Clasa CPoint este similar cu structura Windows POINT:
typedef struct tagPOINT { typedef struct tagPOINT { LONG x; LONG x; LONG y; LONG y; } POINT; } POINT;

Clasa CRect este similar cu structura Windows RECT si include funcii membre pentru a manipula obiecte CRect i structuri Windows de tip RECT:
typedef struct tagRECT { typedef struct tagRECT { LONG left; LONG left; LONG top; LONG top; LONG right; LONG right; LONG bottom; LONG bottom; } RECT; } RECT;

Aceasta definete coordonatele colurilor stnga-sus i dreapta-jos ale dreptunghiului. Un obiect Aceasta definete coordonatele colurilor stnga-sus i dreapta-jos ale dreptunghiului. Un obiect CRect poate fi pasat ca parametru al unei funcii ori de cte ori o structur RECT, LPCRECT sau CRect poate fi pasat ca parametru al unei funcii ori de cte ori o structur RECT, LPCRECT sau LPRECT poate fi trasmis. Dreptunghiul trebuie s fie normalizat (adic s fie asigurat condiia LPRECT poate fi trasmis. Dreptunghiul trebuie s fie normalizat (adic s fie asigurat condiia de ordonare corect a coordonatelor. Dac dreptunghiul este nenormalizat, de ordonare corect a coordonatelor. Dac dreptunghiul este nenormalizat, trebuie apelata funcia NormalizeRect. trebuie apelata funcia NormalizeRect.

Multumesc pentru atenie !