Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
Structura unei aplicatii MFC
Permite generarea unei aplicatii
Windows, care are la baza biblioteca si facilitatile MFC. Exista doua
tipuri MFC AppWizard, unul care permite generarea aplicatiilor executabile
(.exe), iar celalalt pentru crearea bibliotecilor dinamice (.dll). In
ambele cazuri se lanseaza in executie AppWizard, care asista programatorul
in etapa de creare a proiectului. In cadrul acestei prezentari este vorba
de aplicatii 'executabile'.
AppWizard permite generarea mai multor tipuri de proiecte, in functie de
modul principal de vizualizare ce se doreste a fi utilizat in
aplicatie, precum si de tipul de arhitectura Document/View ce se
doreste a fi utilizat :
l Aplicatii bazate pe dialog, la care fereastra principala a aplicatiei este o cutie de dialog;
l Aplicatii SDI (Single Document Interface), care permit programului sa acceseze un singur document la un moment dat;
l Aplicatii MDI(Multiple Document Interface), care permit programului sa acceseze la mai multe documente la un moment dat;
Indiferent de tipul de proiect care se doreste, AppWizard efectueaza atat setarile pentru proiectul respectiv, dar si genereaza automat principalele fisiere sursa, header si de resurse ale aplicatiei. In concluzie, AppWizard genereaza cod; programatorul poate adauga cod in fisierele generate sau poate adauga fisiere noi la proiect, dar nu este indicat sa stearga din codul generat in mod automat.
Class AppWizard
Este un instrument care permite crearea si modificarea claselor aplicatiei. La fel ca si AppWizard, el poate genera cod in functie de specificatiile programatorului. Daca se doreste crearea unei clase noi, ClassWizard va genera doua fisiere, unul pentru declaratia clasei, iar celalalt pentru implementare. In afara de aceasta operatie, folosind ClassWizard se pot adauga date membre sau functii membre noi la o clasa deja existenta. Principalul avantaj este insa cel referitor la gestionarea hartilor de mesaje asociate unei clase.
Fisiere script de resurse
O resursa este un element de
interfata prin intermediul careia utilizatorul poate obtine
anumite informatii sau poate executa anumite actiuni. In mediile
Windows, programele executabile (aplicatii, biblioteci .dll, etc.) pot
avea asociate fisiere script de resurse, care includ informatii
binare despre resursele asociate, pe care programele le utilizeaza in
timpul executiei. Fisierele script de resurse sunt generate in timpul
etapei de compilare, plecand de la fisiere text de resurse, in mod
asemanator modului in care programele obiect (fisiere binare) se
genereaza plecand de la programele sursa de tip text.
Editorul de resurse este un mediu
specializat prin intermediul caruia se pot crea sau modifica resursele
unui proiect in timpul dezvoltarii acestuia. Fisierele de iesire
ale unui editor de resurse sunt fisiere script de tip text care au
extensia .rc. Visual C++ poseda un editor grafic de resurse, ce permite
crearea si modificarea resurselor pe baza unor sabloane predefinite
de resurse. In mod uzual, fisierul text de resurse al unui proiect are
acelasi nume cu cel al proiectului: .rc.
Perspectiva Resource View din cadrul
ferestrei de vizualizare a spatiului de lucru, afiseaza
resursele grupate in principalele categorii de resurse ale mediilor Windows:
acceleratori, cutii de dialog, pictograme, meniuri, tabele se string-uri, bare
de instrumente, etc.
Crearea unei resurse se poate realiza prin intermediul meniului Insert/Resource, sau cu ajutorul
comenzii Insert din cadrul cutiei de
dialog afisata in urma unui click pe butonul dreapta al mouse-ului,
cand se selecteaza o resursa din cadrul Resource View. Aceste comenzi lanseaza in executie editorul de
resurse, care permite crearea resurselor plecand de la sabloane de resurse
prestabilite.
Identificarea resurselor
O resursa are asociata o
pictograma, precum si un identificator prin intermediul caruia
este identificata in cadrul unui program. Un identificator de resursa
este o constanta simbolica, generata in mod uzual de catre
editorul de resurse si care poate fi utilizata in cadrul
fisierelor sursa ale programului.
Pentru simplitate, identificatorii se genereaza de catre editorul de
resurse cu ajutorul directivelor #define in
cadrul unui fisier distinct, cu numele Resource.h. Acest fisier header este inclus atat in cadrul
fisierului script de resurse (cu extensia .rc), cat si in cadrul
fisierelor sursa ale programului. Deoarece intr-un program pot fi
utilizate foarte multe resurse, gestiunea lor de catre programator poate
fi destul de dificila, acesta fiind motivul pentru care este
preferabila varianta gestiunii automate a identificatorilor de resurse. In
mod uzual, structura numelui simbolic al unei resurse este urmatoarea:
ID <tip>_<nume>
unde tip reprezinta tipul clasei
de resurse din care face parte resursa respectiva si in mod uzual
este un caracter, iar este nume este
numele asociat resursei. De exemplu, in fisierul Resource.h poate exista
urmatoarea definitie:
#define IDD_DIALOG 1023
Identificatorii de resurse pot fi utilizati si in cadrul
fisierelor sursa, pentru efectuarea anumitor operatii in care
intervin resurse. De exemplu, pentru crearea unui obiect de tip cutie de dialog
asociata resursei IDD_DIALOG, se poate scrie astfel:
CDialog pDialog = new CDialog(IDD_DIALOG);
sau echivalent, dar neindicat:
CDialog pDialog = new CDialog(1023);
Mesaje si comenzi
Aplicatiile scrise pentru Windows sunt 'message driven'. Ca
raspuns la diferite evenimente cum ar fi click-uri pe mouse, mutari
ale ferestrelor, etc, Windows-ul trimite mesaje la fereastra
corespunzatoare. Aplicatiile bazate pe framework proceseaza
mesajele Windows ca orice alta aplicatie pentru Windows. Dar
framework-ul furnizeaza de asemenea cateva imbunatatiri
care fac procesarea acestor mesaje mai usoara, decat in cazul
uitilizarii de functii API.
Bucla de mesaje din functia membru Run
a clasei CWinApp preia mesajele
generate de diferite evenimente din coada mesaje. De exemplu, cand
utilizatorul face un click pe mouse, Windows trimite mesaje cum ar fi
WM_LBUTTONDOWN cand este apasat butonul din stanga al mouse-ului si
un mesaj de tipul WM_LBUTTONUP atunci cand butonul din stanga este eliberat.
Implementarea tratarii buclei de mesaje a aplicatiei trimite mesajul
la fereastra corespunzatoare.
In cadrul utilizarii MFC-ului, o functie handler dedicata
proceseaza fiecare mesaj. Handlere-le de mesaje sunt functii membre
ale claselor corespunzatoare ferestrelor din cadrul aplicatiei;
scrierea handlerelor de mesaje ocupa o mare parte din timpul consumat cu
scrierea unei aplicatii. La intrebarea : Ce face un handler de mesaj raspunsul poate fi : face orice vrea programatorul ca
raspuns la mesajul respectiv. ClassWizard va crea handlere pentru
programator si va permite programatorului sa le implementeze. Se
poate trece direct din ClassWizard in codul sursa al handler-ului pentru a
completa codul folosind editorul de cod sursa al Visual C++.
Exista trei mari categorii de mesaje:
l Mesaje de tip fereastra.
Aceste mesaje includ in primul rand pe cele care incep cu prefixul WM_, cu exceptia mesajului WM_COMMAND. Mesajele de tip fereastra sunt tratate de catre ferestre si view-uri. Aceste mesaje au adesea parametri care sunt utilizati pentru a determina cum sa fie tratate aceste mesaje.
l Mesaje notificare.
Aceste mesaje includ si mesajul de notificare WM_COMMAND de la controale si alte ferestre copil catre fereastra parinte. De exemplu un control de tip edit poate trimite un mesaj de tip WM_COMMAND ferestrei parinte continand codul de notificare EN_CHANGE, atunci cand utilizatorul a realizat o actiune care a alterat textul din controlul de editare. Handler-ele ferestrelor pentru mesajele de tip notificare vor realiza o actiune corespunzatoare, de exemplu achizitionarea textului din control. Acest tip de mesaje sunt tratate ca mesaje WM_; o exceptie este mesajul BN_CLICKED, care se genereaza cand se executa click pe un buton. Acest mesaj este tratat ca mesajele de tip comanda.
l Mesaje comanda
Aceste mesaje includ notificarile de tip WM_COMMAND de la obiectele de interfata cu utilizatorul: meniuri, butoanele din toolbar si taste acceleratoare. Aceste mesaje sunt tratate diferit de alte mesaje de mai multe tipuri de obiecte.
Maparea
mesajelor
Fiecare clasa din framework care poate receptiona mesaje are
'message map'-ul propriu. Framework-ul utilizeaza
hartile de mesaje pentru a conecta mesajele la functiile handler
asociate. Orice clasa derivata din CCmdTarget poate avea o harta de mesaje. Hartile de
mesaje pot gestiona atat mesaje cat si comenzi.
Barele din meniuri, butoanele din toolbar si tastele acceleratoare sunt
obiecte de interfata cu utilizatorul (user-interface objects).
Fiecare obiect de interfata cu utilizatorul are un ID. Programatorul
asociaza un obiect interfata cu o comanda prin asignarea
aceluiasi ID obiectului si mesajului.
O comanda este complet descrisa de ID-ul atasat ei. ID-ul este
asignat obiectului interfata utilizator care genereaza
aceasta comanda. Tipic, ID-ul are numele in functie de
utilitatea obiectului interfata caruia ii este atasat.
Tipic ID-urile comenzilor au urmatoarea forma:
ID_bara_item
bara este numele barei din meniu, iar
item este item-ul din meniu. De
exemplu pentru comanda New din meniul File putem avea ID-ul ID_FILE_NEW.
Harti
de mesaje
Atunci cand se creeaza o aplicatie cu AppWizard, AppWizard-ul include
o harta de mesaje pentru fiecare clasa derivata din CCmdTarget pe care o creeaza
si gestioneaza. Unele din aceste harti de mesaje au deja
unele intrari pentru anumite mesaje si comenzi predefinite.
O harta de mesaje este localizata in fisierul .CPP al clasei
respective. Pentru a lucra cu hartile de mesaje de baza pe care
AppWizard le creeaza se foloseste ClassWizard-ul. O harta
tipica de mesaje poate arata in felul urmator dupa ce au
fost adaugate cateva intrari:
BEGIN_MESSAGE_MAP(CMyView, CView)
//}AFX_MSG_MAP
END_MESSAGE_MAP()
O harta de mesaje consta dintr-o
colectie de macrouri. Doua macrouri, BEGIN_MESSAGE_MAP si
END_MESSAGE_MAP incadreaza harta de mesaje. Alte macro-uri, cum ar fi
ON_COMMAND, se afla in interiorul hartii de mesaje.
O harta de mesaje include de asemenea comentarii de genul:
//}AFX_MSG_MAP
care incadreaza majoritatea intrarilor. Toate intrarile
adaugate cu ajutorul ClassWizard-ului sunt plasate intre aceste doua
macrouri.
In timpul procesului de cautare al handler-ului unui mesaj verificarea
hartii de mesaje a unei clase nu este singurul lucru realizat.
Daca clasa este derivata din alta clasa si ambele
clase au harti de mesaje atunci trebuie verificata si harta
de mesaje a clasei de baza.
MFC suporta de asemenea maparea unui interval de mesaje la un singur
handler. Se poate mapa un interval de ID-uri de comenzi la:
l functie handler de comanda;
l functie handlea de tip 'update'
un mesaj de tip 'control-notification' pentru un interval de ID-uri de controale la o functie handler de mesaj.
Exemplu de realizare a unei aplicatii SDI
1. Selectarea comenzii New din meniul File.
2. Selectarea MFC AppWizard(exe) din pagina Projects, urmata de alegerea unui nume pentru proiect si selectarea OK-ului; pe ecran va aparea caseta de
dialog MFC AppWizard Step 1 .
3. In caseta de dialog MFC AppWizard Step 1 se poate selecta tipul aplicatiei care se vrea a fi creata. Pentru acest exemplu se selecteaza optiunea Single
Document - SDI. Se executa click pe butonul Next.
4. In caseta MFC AppWizard Step 2 se pot selecta facilitati pentru bazele de date care pot sa fie incluse in aplicatie. In cazul acesta, se alege optiunea implicita
None. Se executa click pe butonul Next.
5. In caseta MFC AppWizard Step 3 se selecteaza tipul de facilitate dorita pentru documente compuse care sa fie inclusa in aplicatie, plus facilitati pentru
automatizare (Automation) sau pentru controale ActiveX. Pentru acest exemplu se alege optiunea None pentru documente compuse, si se lasa dezactivata
optiunea ActiveX Contorls. Se executa click pe butonul Next.
6. In caseta MFC AppWizard Step 4 se pot selecta facilitati suplimentare pentru aplicatie, de exemplu o bara cu instrumente, o bara de stare si elemente de
comanda 3D . Se vor lasa optiunile implicite. Se executa click pe butonul Next.
7. In caseta MFC AppWizard Step 5 se poate configura aplicatia pentru a genera comentarii in cadrul fisierului sursa, avand doua optiuni pentru folosirea
bibliotecii MFC. In cadrul acestui exemplu se selecteaza optiunea 'As a statically linked library', care va permite ca aplicatia sa ruleze in orice sistem ,
fara sa fie necesara instalarea bibliotecii MFC DLL. Se executa click pe butonul Next.
8. Caseta MFC AppWizard Step 6 permite vizualizarea claselor generate in cadrul aplicatiei. Se executa click pe butonul Finish. Pe ecran va aparea caseta
de dialog New Project Information .
9. In caseta de dialog New Project Information sunt afisate specificatiile pentru noua structura de proiect. Dupa ce sunt analizate, se executa click pe OK.
AppWizard va genera codul sursa pentru structura aplicatiei si va deschide spatiul de lucru pentru proiect.
In acest moment se poate rula proiectul, care este functional, dar dupa cum se poate observa arata ca 'o casa nou construita si nemobilata, deci nelocuibila'.
Teme propuse:
1. Sa se realizeze o aplicatie SDI care sa permita
preluarea unui caracter afisabil de la tastatura si
adaugarea acestuia la un string care va afisat pe ecran.
2. Sa se proiecteze o aplicatie SDI. Sa se adauge meniul
'Figuri_geometrice' cu urmatoarele optiuni: cerc,
patrat, elipsa, dreptunghi. Aplicatia va permite la
apasarea butonului stanga al mouse-ului desenarea figurii selectate din
meniu in punctul curent.
3. Sa se dezvolte o aplicatie Dialog Based pe a carei
fereastra principala sa se gaseasca doi ochi a
caror pupila urmareste deplasarea mouse-ului.
4. Sa se realizeze un proiect folosind biblioteca MFC care sa
permita desenarea unei fete umane. Expresia fetei umane se poate
schimba prin apasarea unei taste: de exemplu la apasarea tastei
'Z' va fi afisata o fata zambitoare.
5. Sa se proiecteze o aplicatie MFC pentru un calculator de buzunar
ce are implementate operatiile de baza.
6. Sa se dezvolte o aplicatie care sa permita editarea
informatiilor despre o grupa de studenti.
7. Sa se dezvoltre o aplicatie care sa permita introducerea
de informatii despre diferite tipuri de masini. Se va implementa o
ierarhie de clase a carei clasa de baza va fi clasa
CAutovehicul; clasele derivate sunt: clasa CAutomobil, CAutobuz si Camion.
8. Sa se scrie o aplicatie cu o clasa template pentru
operatii cu numere complexe. Aplicatia va avea o interfata
grafica care va permite operatii cu numere complexe.
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre:
|
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |