QReferate - referate pentru educatia ta.
Cercetarile noastre - sursa ta de inspiratie! Te ajutam gratuit, documente cu imagini si grafice. Fiecare document sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Documente informatica

Structura unei aplicatii MFC



Structura unei aplicatii MFC

Scopul lucrarii Utilizarea bibliotecii MFC (Microsoft Foundation Class) Desfasurarea lucrarii Se vor scrie programe folosind Wizard-ul din Visual C++ si se vor studia modul in care mesajele si comenzile sunt procesate de catre framework si cum poate programatorul sa conecteze aceste mesaje la functiile handler folosind utilitarul ClassWizard.

MFC AppWizard

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.



Nu se poate descarca referatul
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 }