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

Aplicatii bazate pe casete de dialog. Controale standard



Aplicatii bazate pe casete de dialog. Controale standard


Scopul lucrarii: Prezentarea casetelor de dialog si a controalelor standard.

Desfasurarea lucrarii: Aplicatiile Windows comunica frecvent cu utilizatorul prin intermediul casetelor de dialog. Clasa CDialog furnizeaza o interfata pentru gestiunea casetelor de dialog. Pentru editarea template-ului corespunzator casetelor de dialog se foloseste 'Visual C++ dialog editor'. Uitlizarea ClassWizard-ului simplifica procesul de initializare si validare a controalelor din caseta de dialog si de culegere a valorilor introduse de utilizator.

Casete de dialog modale si nemodale

Clasa CDialog poate fi utilizata pentru gestionarea a doua tipuri de casete de dialog:



l casete de dialog modale, care cer utilizatorului inchiderea lor pentru ca aplicatia sa poata continua;

l casete de dialog nemodale care pot ramane pe ecran permitand interactiunea cu utilizatorul in orice moment, dar permit si interactinea cu alte ferestre ale aplicatiei.

Resursa pe baza careia este construita caseta de dialog este aceeasi si in cazul casetelor modale si pentru cazul in care caseta de dialog este nemodala.
Crearea unei casute de dialog implica urmatorii pasi:

l folosirea editorului de resurse pentru construirea casetei de dialog si crearea resursei;

l folosirea ClassWizard-ului pentru crearea clasei atasate casetei de dialog.

Conectarea controalelor resursei la handlere de mesaje folosind ClassWizard


Initializarea casetelor de dialog

Cu ajutorul editorului de resurse se creaza caseta de dialog si i se asociaza un identificator de resursa care in mod uzual are numele simbolic IDD_<nume_resursa>,  iar din caseta de controale se pot adauga pe suprafata ferestrei de dialog controalele dorite si li se pot seta proprietatile, fiecare control adaugat casetei de dialog avand identificatorul propriu de resursa.

Pentru crearea clasei asociata casetei de dialog, se poate utilizeaza ClassWizard-ul, ce permite specificarea numelui pentru clasa, care va fi derivata din CDialog. Wizard-ul va cere identificatorul de resursa, pentru a-l asocia clasei, acesta fiind identificatorul care a fost specificat anterior in cadrul editorului de resurse.

Crearea efectiva a cutiei de dialog in cadrul aplicatiei se realizeaza prin intermediul functiei constructor al clasei asociate, care permite crearea obiectul asociat unei instante a ferestrei. Sistemul Windows trimite spre fereastra nou creata un mesaj WM_INITDIALOG,  astfel ca inainte ca aceasta sa fie afisata pe ecran este apelata functia membra a clasei CDialog, OnInitDialog, care este suprascrisa in cadrul clasei atasate casetei de dialog. Programatorul poate introduce codul necesar pentru initializarea casetei de dialog in cadrul acestei functii. Este necesara apelarea variantei din clasa de baza (CDialog) in implementarea rescrierii acestei functii. Principala functie a clasei CDialog utilizata in aplicatii este functia DoModal, ce permite afisarea unei casete de dialog modale.


Folosirea ClassWizard pentru adaugarea variabilelor membru asociate controalelor din caseta de dialog si specificarea macro-urilor DDX si DDV

In aplicatiile MFC transferul datelor intre controale si aplicatie se bazeaza pe variabilele membre ale clasei asociate ferestrei de dialog. Pentru fiecare control din cadrul unei ferestre de dialog se poate asocia o variabila membra a clasei ferestrei de dialog, in care se pastreaza informatiile schimbate intre utilizator si aplicatie.

Cele doua operatii pe care trebuie sa le implementeze un programator sunt:

-   sa adauge cate o variabila membru pentru fiecare control din cadrul unei ferestre de dialog;

-   sa realizeze schimbul de informatii intre controale si variabilele asociate lor.

Pentru prima operatie, adaugarea variabilelor membre clasei asociata ferestrei de dialog, se utilizeaza ClassWizard-ul. Acesta permite adaugarea a doua tipuri de variabile membru: de tip valoare si de tip control. In cazul variabilelor de tip control, va trebui specificat identificatorul de resursa asociat controlului pentru care se doreste crearea variabilei.

Pentru implementare celei de-a doua operatie, realizarea schimbului de informatii intre controale si variabilele asociate, se utilizeaza functia DoDataExchange.


Exemplu pentru functia DoDataExchange:


void CDialogExemplu::DoDataExchange(CDataExchange* pDX)

}AFX_DATA_MAP



Prin executia functiei DoDataExchange, dupa apasarea butonului OK a ferestrei de dialog se memoreaza valoare introdusa in editbox-ul cu id-ul IDC_EDIT, in variabila m_nEdit a clasei CDialogExemplu. Parametru functiei DoDataExchange este un pointer la clasa MFC CDataExchange. Obiectul indicat de pointer este utilizat in cadrul macro-urilor DDX_ si DDV_, pentru realizarea operatiilor specifice schimbului de informatii si validarii. Clasa CDataExchange poseda o variabila membru de tip boolean, m_bSaveAndValidate,  care specifica directia dorita de transfer a informatiei (TRUE pentru transferul informatiei dinspre controale inspre aplicatie si FALSE pentru sensul invers). Functiile DDX_ poseda in mod uzual trei parametri: pointerul spre obiectul DoDataExchange, identificatorul resursei controlului, precum si variabila membra asociata controlului. Mecanismul DDX permite schimbul de date intre controalele din caseta de dialog si variabilele membru. Asa cum am mai spus acest schimb se poate efectua in ambele directii, declansarea mecansimului DDX se face prin apelarea functiei UpdateData din clasa CDialog. In functie de valoarea parametrului cu care este apelata aceasta functie (TRUE - valoare implicita/FALSE) datele sunt trimise spre caseta de dialog, respectiv sunt citite din caseta de dialog si memorate in variabilele membru atasate. De asemenea framework-ul ofera suport pentru validarea datelor de intrare. Acest mecanism este implementat prin intermediul macro-urilor DDV si este activat prin introducerea conditiilor de validare in cadrul ClassWizard-ului, atunci cand sunt definite variabilele membru de tip valoare.

Inchiderea unei casete de dialog
Inchiderea unei casete de dialog se face selectand unul din butoanele OK sau CANCEL din caseta. Implementarea oferita de framework pentru handlerele (functiile atasate tratarii mesajelor generate la aparitia celor doua evenimente) celor doua butoane apeleaza metoda EndDialog, ce permite inchiderea unei casete de dialog.

Accesarea controalelor dintr-o caseta de dialog
Accesarea controalelor dintr-o caseta de dialog se face folosind variabile de tip control asociate acestor controale. Definirea acestor variabile se face cu ajutorul, asa cum am mai spus, folosind  ClassWizard-ului. Dupa ce a fost definita o astfel de variabila aceasta poate fi folosita pentru apelerea oricaror metode asociate controlului respectiv. Acest mod de lucru cu o resursa de tip control ofera o accesibilitate sporita asupra acesteia. Totusi nu se recomanda folosirea acestor variabile decat atunci cand este cazul, de obicei atunci cand se lucreaza cu controale de tip ListBox, ComboBox.

Controale standard


Interarctivitatea sistemului de operare Windows, se bazeaza in intregime pe controalele sale, indiferent daca utilizatorul executa click pe un buton pentru a lansa o comanda, scrie intr-o caseta de editare pentru a introduce date intr-un program sau selecteaza un fisier dintr-o caseta de dialog. Fiecare astfel de control este legat de o clasa asociata controlului. Cele mai frecvente controale sunt :

Text static (StaticText): Un sir de caractere care nu poate fi editat.Controalele cu text static sunt folosite, de regula, pentru etichetarea altor componente dintr-o caseta de dialog. Clasa MFC asociata este CStatic.
Caseta de editare (EditBox): O caseta in care poate fi introdus un text. Textul poate fi editat, copiat si lipit prin intermediul utilizarii lui Windows Clipboard. Clasa MFC asociata este CEdit.
Buton cu apasare (PushButton): Un control care poate declansa o comanda atunci cand este actionat prin click. Clasa MFC asociata este CButton. Butoanele cu apasare contin, de regula, o eticheta text si sunt adesea animate, astfel ca par 'apasate', atunci cand sunt actionate.
Buton radio (RadioButton): Un buton folosit, in general, in grupuri de butoane, din care nu poate fi selectat simultan decat unul singur.Cand este selectat un astfel de buton, butonul selectat anterior este deselectat. Clasa MFC asociata este CButton. Pentru gruparea butoanelor se poate folosi un control de tip Group Box.
Caseta de validare (CheckBox): O caseta folosita pentru activarea, respectiv dezactivarea optiunilor. Spre deosebire de butoanele radio, casetele de validare sunt folosite in mod traditional pentru a permite selectarea mai multor elemente din grup.
Caseta cu lista (ListBox): O lista de articole, pentru care se poate folosi mouse-ul pentru a selecta unul sau mai multe articole din lista.Cand sunt mai multe articole decat permite afisarea in perimetrul casetei cu lista, apare si o bara de derulare care ii permite utilizatorului sa vizualizeze si articolele care nu sunt vizibile din caseta. Clasa MFC asociata este CListBox.
Caseta combinata (ComboBox): O lista de articole combinata cu o caseta de editare. Se poate fie executa click pe sageata casetei combinate pentru a afisa o lista cu optiuni, fie introducerea optiunii dorite in caseta de editare asociata. Clasa MFC asociata este CComboBox.

Caseta de grupare (GroupBox): Folosita pentru gruparea altor controale. De exemplu, casetele de grupare sunt folosite adesea pentru gruparea mai multor butoane radio. Caseta poate contine si o legenda care sa descrie continutul casetei.

Introducerea controalelor in ferestre non-dialog


Cel mai adesea se folosesc controale standard cum ar fi casetele de editare si butoanele de apasare in aplicatii MFC de tip caseta de dialog. Nu exista insa nici

un motiv pentru a nu putea plasa astfel de controale in orice tip de fereastra. De exemplu, o aplicatie SDI poate utiliza controale in cadrul fereastrei principale de

vizualizare. Pentru a introduce si a raspunde la controale intr-o fereastra NON-dialog, trebuie efectuati urmatorii pasi:

1. Instantierea unui obiect din clasa MFC asociata tipului de control dorit. De exemplu, daca se doreste afisarea unei casete de tip lista in cadrul ferestrei, se va

instantia un obiect din clasa CListBox.

2. Apelul functiei membru a clasei asociate controlului, Create pentru instanta declarata pentru a crea controlul. De exemplu, dupa instantierea unui obiect din clasa

CListBox cu numele listBox, se apeleaza listBox.Create().

3. Tratarea evenimentelor corespunzatoare tipului de control creat prin adaugare de functii mesaj/raspuns in cadrul hartii de mesaje a clasei ferestrei container.Pentru

o caseta cu lista se poate introduce un macro ON_LBN_CLICKED() pentru ca aplicatia sa poata raspunde la selectiile facute in caseta cu lista.

4. Implementarea functiilor mesaj/raspuns asociate macro-urilor din harta de mesaje introduse la pasul 3.


Apelul functiilor membru Create(), nu se poate face in cadrul functiei constructor a unei clase asociate unei fereastre container, deoarece obiectul asociat fereastrei

abia in acest moment se creaza. In schimb se poate suprascrie functia OnCreate a clasei asociate unei fereastre container, care se apeleaza ca raspuns la mesajul

WM_CREATE cu putin inainte afisarii ferestrei container.


Functia Create pentru clasa CStatic are urmatorul prototip:

BOOL Create(LPCSTR lpszText,DWORD dwStyle,const RECT& rect, CWND* pParentWnd,UINT nId= 0xffff);

       - lpszText - adresa textului ce se va afisa

       - dwStyle - indicatoarele de stil pentru control (trebuie specificate cel putin doua stiluri de fereastra WS_VISIBLE | WS_CHILD)

       - rect - o referinta pentru un obiect RECT sau CRect care specifica marimea si pozitia controlului in cadrul ferestrei parinte

       - pParentWnd - un pointer spre fereastra parinte (container) a controlului

       - nId - elementul de identificare al controlului (indentificatorul de resursa). 


Functia Create pentru clasa CEdit are urmatorul prototip:

BOOL Create(DWORD dwStyle,const RECT& rect, CWND* pParentWnd,UINT nId);

       - dwStyle - indicatoarele de stil pentru control (trebuie specificate cel putin doua stiluri de fereastra WS_VISIBLE | WS_CHILD)

       - rect - o referinta pentru un obiect RECT sau CRect care specifica marimea si pozitia controlului in cadrul ferestrei parinte

       - pParentWnd - un pointer spre fereastra parinte (container) a controlului

       - nId - elementul de identificare al controlului (indentificatorul de resursa). 

 Pentru casetele de editare sunt definite o serie de functii macro. De exemplu pentru mesajul de notificare EN_CHANGE, care este trimis atunci cand utilizatorul

modifica textul din cadrul casetei de editare, exista functia macro ON_EN_CHANGE:

       ON_EN_CHANGE(nID,numeFuntie)


Functia Create pentru clasa CButton are urmatorul prototip:

BOOL Create(LPCSTR lpszCaption,DWORD dwStyle,const RECT& rect, CWND* pParentWnd,UINT nId);

       - lpszCaption - textul asociat butonului

       - dwStyle - indicatoarele de stil pentru control (trebuie specificate cel putin doua stiluri de fereastra WS_VISIBLE | WS_CHILD)

       - rect - o referinta pentru un obiect RECT sau CRect care specifica marimea si pozitia controlului in cadrul ferestrei parinte

       - pParentWnd - un pointer spre fereastra parinte (container) a controlului

       - nId - elementul de identificare al controlului (indentificatorul de resursa). 

Cand utilizatorul executa click pe un buton, se trimite un mesaj de notificare ferestrei parinte. Acest mesaj este BN_CLICKED (un singur click) sau

BN_DOUBLECLICKED (doua click-uri). Exista doua functii macro pentru tratarea mesajelor generate la apasarea unui buton:

       ON_BN_CLICKED(nID,numeFunctie)

       ON_BN_DOUBLECLICKED(nID,numeFunctie)

Functia Create pentru o caseta de validare este aceeasi functie descrisa mai sus pentru clasa CButton, numai ca se foloseste stilul BS_AUTOCHECKBOX, care

cere sa se creeze o caseta de validare care nu trebuie validata sau invalidata de catre program, butonul realizand aceasta operatie atunci cand este actionat de

utilizator. Pentru a testa daca caseta este validata sau nu, sunt definite doua constante:

       BST_CHECKED, respectiv BST_UNCHECKED, iar starea casetei este returnata de functia membru a clasei CButton, GetCheck


Functia Create pentru clasa CListBox are urmatorul prototip:

BOOL Create(DWORD dwStyle,const RECT& rect, CWND* pParentWnd,UINT nId);

       - lpszCaption - textul asociat butonului

       - dwStyle - indicatoarele de stil pentru control (trebuie specificate cel putin doua stiluri de fereastra WS_VISIBLE | WS_CHILD)

       - rect - o referinta pentru un obiect RECT sau CRect care specifica marimea si pozitia controlului in cadrul ferestrei parinte

       - pParentWnd - un pointer spre fereastra parinte (container) a controlului

       - nId - elementul de identificare al controlului (indentificatorul de resursa). 

Cand utilizatorul executa un click in cadrul casetei cu lista, se trimite un mesaj de notificare ferestrei parinte. Acest mesaj este LBN_SELCHANGE pentru un

singur click si LBL_DBLCLK pentru dublu click. Exista doua functii macro pentru tratarea mesajelor generate:

       ON_LBL_SELCHANGE(nID,numeFunctie)

       ON_LBL_DBLCLK(nID,numeFunctie)  


Functia Create a clasei CComboBox are acelasi prototip de la clasa CListBox. Cand utilizatorul executa click pe un articol, se trimite un mesaj de notificare

ferestrei parinte. Acest mesaj poate fi CBN_SELCHANGE (sau CBN_SELENDOK) pentru un singur click, respectiv CBN_DBLCLK pentru dublu click.

Exista doua functii macro pentru tratarea mesajelor generate:

       ON_CBN_SELENDOK(nID,numeFunctie)

       ON_CBN_DBLCLK(nID,numeFunctie)


Introducerea controalelor in ferestre dialog


O alternativa la cele descrise mai sus pentru a introduce controale in cadrul aplicatiilor dezvoltate este crearea unui proiect care sa aiba ca fereastra principala o

caseta de dialog. Marele avantaj consta in faptul ca, deoarece fereastra parinte este o caseta de dialog, se pot defini controale folosind editorul pentru casete de

dialog din Visual C++ prin drag and drop.

Primul pas consta in crearea unei noi aplicatii MFC folosind AppWizard-ul. In a doua fereastra a wiyard-ului se va selecta optiunea Dialog Based. Urmatorul pas

este adaugarea de controale folosind tehnica 'drag&drop'. Pentru tratarea mesajele corespunzatoare diverselor evenimente ce pot aparea la nivelului ferestrei

principale a aplicatiei sau la nivelul controalelor din cadrul ferestei se poate folosi ClassWizard-ul.


Teme propuse:


1. Sa se realizeze o aplicatie SDI in fereastra careia sa se adauge controale standard de tipul celor expuse mai sus. Aplicatia se va dezvolta incremental, adica se va

incepe cu controale de tip static, si se va vizualiza rezultatul si se va continua in acelasi mod.


2. Sa se realizeze o aplicatie de tip DialogBased, in cadrul careia sa se adauge controale standard de tipul celor expuse mai sus. Aplicatia se va dezvolta

incremental, adica se va incepe cu controale de tip static, si se va vizualiza rezultatul si se va continua in acelasi mod.


3. Sa se modifice  aplicatia de la problema 1 , astfel incat controale standard introduse sa raspunda fiecare la eveniment prin afisarea unui mesaj( se va utiliza functia

MessageBox


4. Sa se modifice  aplicatia de la problema 2 , astfel incat controale standard introduse sa raspunda fiecare la eveniment prin afisarea unui mesaj( se va utiliza functia

MessageBox


5. Sa se dezvolte o aplicatie care sa permita introducerea datelor despre studentii unei sectii, date care vor avea urmatoarea structura nume, prenume, numar

matricol si sa se adauge aceste informatii intr-o lista de tip CListBox. Sa se implementeze functii de editare a unei inregistrari din lista si de stergere a unei

inregistrari.


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 }