CATEGORII DOCUMENTE |
Arhitectura document/view
Incepand cu MFC 2.0 (MFC - Microsoft Foundation Calsses, colectie de clase predefinite, disponibile in Visual C++) s-a introdus acest tip de arhitectura a aplicatiilor Windows. Intr-o aplicatie de tip document/view, datele aplicatiei sunt reprezentate printr-un obiect document, iar vizualizarile acestor date sunt reprezentate printr-unul sau mai multe obiecte view. Obiectele document si view lucreaza impreuna pentru a procesa intrarile utilizatorului si pentru a afisa reprezentarile textuale sau grafice ale datelor rezultate. Clasele de baza pentru acest tip de arhitectura sunt CDocument si CView. MFC suporta doua tipuri de aplicatii document/view: I) SDI (Simple Document Interface) in care se poate deschide doar un singur document la un moment dat ; II) MDI (Multiple Document Interface) care permite utilizatorului sa aiba deschise la un moment dat doua sau mai multe documente.
Arhitectura document/afisare permite separarea functiilor pentru salvarea/restaurarea datelor de functiile pentru vizualizarea acestora. Clasa CDocument a aplicatiei implementeaza functiile corespunzatoare serializari datelor in/si dintr-un fisier de pe hard-disc. Clasa CView permite afisarea datelor si editarea acestora.
Serializarea reprezinta procesul de transformare a unei structuri de date intr-un flux liniar de biti, iar procesul invers, de recuperare a structurii de date dintr-un flux de biti poarta numele de deserializare. Serializarea este folosita pentru: I) stocarea unei structuri de date intr-o memorie persistenta (stocarea sub forma de fisier pe hard-disc); II) transferul unei structuri de date (prin conexiunile unei retele).
In general, o clasa care suporta serializarea este derivata din clasa CObject a bibliotecii de clase MFC. La nivelul clasei COject este definita o functie membru virtuala numita Serialize() avand urmatoarea signatura:
virtual void Serialize(CArchive& ar);
In MFC scrierea si citirea de date intr-un si dintr-un fisier se realizeaza prin intermediul unui obiect care poarta numele de arhiva si care este o instanta a clasei CArchive. Fiecare functie Serialize() implementata intr-o clasa are ca si parametru o referinta catre o instanta a unei astfel de arhive. Fiecare arhiva contine o referinta catre un fisier si, pe masura ce obiectele sunt incluse in ea, va avea grija sa ataseze fisierului sirul de biti corespunzator. Intr-o aplicatie construita pe baza arhitecturii document-view, clasa document va contine functia Serialize() care va fi apelata ori de cate ori este necesara salvarea sau incarcarea intr-un fisier (de exemplu, ca raspuns la comenzile `Open' sau `Save' din meniul `File'). Implementarea corecta a acestei functii pentru a realiza stocarea si recuperarea tuturor obiectelor continute in document depinde strict de programator.
Pentru a putea folosi avantajele arhitecturii document/view, trebuie efectuati urmatorii pasi:
1. Utilizarea AppWizard-ului pentru crearea unui schelet de aplicatie SDI;
2. Declararea obiectelor necesare pentru stocarea datelor in cadrul clasei CDocument;
3. Completarea functiei OnNewDocument() a clasei CDocument pentru initializarea unui nou document;
4. Suprascrierea functiei DeleteContents() din clasa CDocument care permite stergerea datelor corespunzatoare documentului anterior;
5. Completarea functiei Serialize() a clasei CDocument pentru a salva si incarca datele documentului;
6. Completarea functiei OnDraw() a clasei CView pentru a afisarea continutului documentului curent;
7. Clasei CView i se adauga codul necesar pentru a permite utilizatorului sa editeze datele documentului curent.
Aplicatia urmatoare foloseste arhitectura document/view pentru salvarea/incarcarea si editare unui sir de caractere in/dintr-un fisier de pe hard-disc.
Declararea obiectelor in cadrul clasei CDocument
Datele aplicatiei P3 sunt un sir de caractere, iar pentru prelucrarea acestora se utilizeaza clasa CString din MFC. Se va adauga o data membru cu numele stringinout in cadrul clasei document CP3Doc. Modificatorul de acces folosit pentru acest membru este public.
Completarea functiei OnNewDocument()
Cand se creeaza un nou document, se apeleaza functia OnNewDocument() a clasei document, care permite aplicatiei posibilitatea de a initializa noul document. In cazul aplicatiei dezvoltate OnNewDocument() va initializa sirul de caractere cu denumirea 'new string'.
Functia OnNewDocument completa este:
BOOL CP3Doc::OnNewDocument()
Apelul functiei UpdateAllViews() permite actualizarea imaginii afisate.
Completarea functiei Serialize
Functia Serialize() a clasei CDocument este locul in care sunt incarcate datele documentului sau care permite salvarea acestor date. Parametrul pe care il primeste functia este un obiect CArchive, care poate serializa mai multe tipuri de date, inclusiv clase de genul CString. Pentru salvarea datelor folosind obiectul CArchive atasat fisierului se utilizeaza operatorul <<. Pentru a incarca date din arhiva, se foloseste operatorul >>. Ambii operatori sunt supraincarcati in clasa CArchive astfel incat se pot salva si incarca multe tipuri de date fara nici o problema.
In cadrul functiei Serialize(), apelul functiei UpdateAllViews() realizat dupa incarcarea documentului, permite actualizarea imaginii afisate.
void CP3Doc::Serialize(CArchive& ar)
else
Completarea functiei OnDraw()
Functia OnDraw() din clasa CView are rolul de a afisa(desena) continutul documentului curent in cadrul ferestrei aplicatiei. Modul de afisare depinde de tipul datelor si de dorinta programatorului. In cazul aplicatiei prezentate, imaginea afisata este continutul sirului de caractere stringinout.
void CP3View::OnDraw(CDC* pDC)
Adaugarea codului pentru editarea sirului de caractere
Pentru a putea modifica sirul de caractere trebuie creata o caseta de dialog cu un control de tip EditBox care sa permita preluarea unui nou sir. Se adauga la aplicatie o noua resursa de tip CDialog, care se editeaza prin adaugarea unui control de tip EditBox. Clasa ce va 'sta in spatele' ferestrei de dialog are numele CDialogstring, iar pentru aceasta clasa se adauga o data membru de tip CString, cu numele m_string, in care se va prelua string-ul tastat.
void CP3View::Onmodifica()
Apelul functiei Invalidate(); permite actualizarea imaginii afisate.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1178
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved