CATEGORII DOCUMENTE |
DOCUMENTE SIMILARE |
|
TERMENI importanti pentru acest document |
|
Controale comune
1. Bara de evolutie
Bara de evolutie reprezinta grafic starea unei operatii in derulare. Aceasta reprezentare se face prin umplerea barei cu dreptunghiuri pe masura derularii operatiei. Reprezentata in MFC de clasa CProgressCtrl, bara de evolutie este cel mai simplu dintre controalele comune. Nu trebuie decat sa fie afisata si sa se mareasca numarul de dreptunghiuri in mod corespunzator pe parcursul operatiei a carei evolutie o reprezinta bara.
Pentru a crea o bara de evolutie, mai intai trebuie definit un obiect din clasa CProgressCtrl:
CProgressCtrl m_progBar;
Apoi trebuie apelata functia membru Create () a obiectului, care creeaza bara de evolutie propriu-zisa si o asociaza obiectului CProgressCtrl. Apelarea functiei Create () poate arata astfel:
m_progBar.Create(WS_CHILD | WS_BORDER | WS_VISIBLE, CRect(20, 40, 360, 80), this, IDC_PROGBAR);
Dupa ce bara de evolutie a fost creata, acesteia ii pot fi configurate atributele, inclusiv domeniul, marimea pasilor si pozitia initiala. Domeniul este grupa de valori reprezentata de bara. De exemplu, daca bara este folosita pentru a reprezenta un procentaj, se va folosi un domeniu de la 0 la 100. Marimea pasului este portiunea din bara care este umpluta cand aplicatia incrementeaza controlul. In cazul unei bare de evolutie cu reprezentare procentuala, se poate folosi un pas cu marimea 10, ceea ce inseamna ca sunt necesare zece pasi pentru umplerea barei. Pozitia initiala este portiunea din bara care este deja umpluta cand aplicatia o afiseaza pe ecran. De regula, aceasta valoare este 0.
Pentru a stabili domeniul, pasul si pozitia, trebuie apelate functiile membru SetRange(), SetStep() si SetPos () ale clasei CProgressCtrl:
m_progBar.SetRange(1,
m progBar.SetStep(10);
m_progBar.SetPos
Singurul lucru care mai trebuie facut este incrementarea controlului pentru a indica evolutia operatiei. Pentru aceasta se apeleaza functia membru StepIt() :
m_progBar.StepIt();
Functia StepIt() executa incrementarea cu valoarea stabilita a controlului. In cazul unui control cu un domeniu de la 0 la 100 si o valoare a pasului de 10, aplicatia trebuie sa apeleze functia StepIt() de zece ori pentru a umple bara de evolutie.
Figura 1: Bara de evolutie este umpluta cu dreptunghiuri pe masura
derularii operatiei.
Modul de functionare al barei de evolutie din aplicatia P2
Aplicatia creeaza bara de evolutie in cadrul functiei mesaj-raspuns Onbe() corespunzatoare atributului bara de evolutie (m_progBar - variabila membra de tip CProgressCtrl a clasei CP2View)
void CP2View::Onbe()
In figura 1 este prezentata o bara de evolutie care arata o operatie pe sfert incheiata. Aceasta bara de evolutie are domeniul de la 1 la 100, valoarea pasului de 10 si incepe de la pozitia 25, ceea ce inseamna ca bara este pe sfert plina cand apare pe ecran. Cand utilizatorul executa clic in fereastra aplicatiei, Windows trimite mesajul wm_lbuttondown, pe care programul il proceseaza in functia OnLButtonDown ():
void CP2View::OnLButtonDown(UINT nFlags, CPoint point)
Programul apeleaza SetTimer() pentru a porni ceasul din Windows. Cele trei argumente ale functiei SetTimer() sunt numarul ceasului, numarul de milisecunde intre evenimentele de ceas si adresa unei functii de apelat. Cand este pornit ceasul, Windows trimite ferestrei un mesaj wm_timer. Se poate raspunde la aceste mesaje adaugand functia mesaj-raspuns OnTimer(), dupa cum urmeaza:
void CP2View::OnTimer(UINT nIDEvent)
De fiecare data cand aplicatia primeste un mesaj wm_timer MFC apeleaza OnTimer(), care apeleaza functia StepIt() pentru bara de evolutie. Cat functioneaza ceasul, bara de evolutie continua sa marcheze derularea operatiei.
2. Butonul glisant
Daca creati un buton glisant cu un domeniu de la 0 la 100, utilizatorul poate selecta numai valori (sau domenii de valori) de la 0 la 100. Pentru a selecta o valoare, utilizatorul trebuie sa deplaseze butonul folosind mouse-ul sau poate folosi tastele directionale de pe tastatura.
Figura 2: Buton glisant
Pentru a crea un buton glisant, mai intai trebuie definit un obiect al clasei CSliderCtrl:
CSliderCtrl m_slider;
Apoi trebuie apelata functia membru Create () a obiectului, care creeaza butonul glisant propriu-zis si il asociaza obiectului CSliderCtrl. Functia Create () a clasei CSliderCtrl are urmatorul prototip:
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nlD) ;
dwStyle |
Indicatoarele de stil ale butonului glisant |
rect |
Un obiect rect sau CRect care specifica marimea si pozitia butonului glisant |
pParentWnd |
Un pointer spre fereastra parinte a butonului glisant |
nID |
Elementul de identificare al butonului glisant |
Aplicatia P2 creeaza bara de evolutie in cadrul functiei mesaj-raspuns Onbg() corespunzatoare atributului buton glisant.
void CP2View::Onbg()
Aceasta functie creeaza o bara orizontala cu buton glisant si indicatoare de gradare atat deasupra, cat si sub canalul de glisare si initializeaza butonul din aplicatie
Butonul glisant are stiluri proprii, in afara stilurilor standard ale ferestrei. Pentru stilurile ferestrei, va trebui sa specificati cel putin stilurile WS_CHILD si WS_VISIBLE. De exemplu, butonul glisant de mai jos specifica stilul WS_BORDER pentru ca marginile lui sa iasa in evidenta fata de fundalul alb al ferestrei. In tabelul urmator sunt prezentate toate aceste stiluri:
Stil |
Descriere |
TBS_AUTOTICKS |
Da butonului posibilitatea de a desena indicatoare de gradare |
TBS_BOTH |
Afiseaza indicatoarele de gradare pe ambele parti ale barei butonului |
TBS_BOTTOM |
Afiseaza indicatoarele de gradare in partea de jos a barei butonului |
TBS_ENABLESELRANGE |
Permite butonului sa afiseze domenii de selectie |
TBS__HORZ |
Creeaza o bara orizontala cu buton glisant |
TBS_LEFT |
Plaseaza indicatoare de gradare pe partea stanga a unei bare verticale |
TBS_NOTICKS |
Creeaza o bara cu buton glisant fara indicatoare de gradare |
TBS_RIGHT |
Plaseaza indicatoare de gradare pe partea dreapta a unei bare verticale |
TBS_TOP |
Plaseaza indicatoare de gradare pe partea superioara a unei bare orizontale |
TBS_VERT |
Creeaza o bara verticala cu buton glisant |
Functia Onbg() apeleaza apoi SetRange () pentru a stabili domeniul butonului glisant intre 0 si 100 (m_slider - variabila membra de tip CSliderCtrl a clasei CP2View). Apelarea functiei SetTicFreq() determina frecventa aparitiilor indicatoarelor de gradare pe bara butonului glisant. Functiile SetLineSize() si SetPageSize () determina distanta pe care se deplaseaza butonul glisant cand utilizatorul apasa o tasta sau executa click cu mouse-ul. Lungimea liniei determina valoarea de incrementare cand utilizatorul foloseste tastele cu sageata de la tastatura. Marimea paginii determina valoarea de incrementare cand utilizatorul executa clic cu mouse-ul pe canalul de ghidare sau cand apasa tastele PageUp sau PageDown de pe tastatura.
Dupa ce aveti afisat pe ecran butonul glisant, aveti nevoie de o metoda pentru a afla cum il manevreaza utilizatorul. Cand il misca, butonul genereaza mesajul WM_HSCROLL, la care puteti raspunde in aplicatie. Pentru aceasta, folositi ClassWizard pentru a adauga functia membru OnHScroll () in aplicatie. OnHScroll () determina valoarea curenta a butonului glisant, converteste aceasta valoare intr-o linie de text (pos - variabila membra a clasei CP2View care contine pozitia cursorului). Apoi apeleaza prin intermediul functiei Invalidate() functia OnDraw() care afiseaza linia de text in fereastra aplicatiei.
void CP2View::OnHScroll
(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
void CP2View::OnDraw(CDC* pDC)
3. Controlul de incrementare
Controlul de incrementare reprezinta o alta solutie pentru a obtine informatii de la utilizator cand doriti ca valoarea introdusa sa fie intr-un domeniu determinat. Dar, in loc sa miste un buton, utilizatorul trebuie sa execute click cu mouse-ul pe sageti pentru a modifica valoarea din caseta.
Figura 3: Controlul de incrementare
Pentru a crea un buton de incrementare, mai intai trebuie definit un obiect al clasei CSpinButtonCtrl :
CSpinButtonCtrl m_spin;
Apoi apelati functia membru Create() a obiectului, care creeaza controlul de incrementare propriu-zis si il asociaza obiectului CSpinButtonCtrl. Functia Create() a clasei CSpinButtonCtrl are urmatorul prototip :
BOOL Create (DWORLD dwStyle, const RECT & rect, CWnd* pParentWnd, UINT nID);
dwStyle |
Indicatoarele de stil ale butonului de incrementare |
rect |
Un obiect RECT sau CRect care specifica marimea si pozitia butonului de incrementare |
pParentWnd |
Un pointer spre fereastra parinte a butonului de incrementare |
nID |
Elementul de identificare al butonului de incrementare |
Aplicatia P2 creeaza controlul de incrementare (intai controlul insotitor m_spinEdit al controlului de incrementare, apoi controlul de incrementare m_spin) in cadrul functiei mesaj-raspuns Onci() corespunzatoare atributului controlul de incrementare
void CP2View::Onci()
La apelarea functiilor Create() pentru indicatoarele de stil vor trebui specificate cel putin stilurile WS_CHILD si WS_VISIBLE. Dar in afara stilurilor standard mentionate, controlul de incrementare are stiluri proprii prezentate in tabelul urmator:
UDS_ALIGNLEFT |
Plaseaza butonul de incrementare in stanga controlului insotitor |
UDS_ALIGNRIGHT |
Plaseaza butonul de incrementare in dreapta controlului insotitor |
UDS_ARROWKEYS |
Permite controlului sa raspunda la mesajele tastelor cu sageata in sus si in jos de pe tastatura |
UDS_AUTOBUDDY |
Specifica automat controlul drept control insotitor |
UDS_HORZ |
Orienteaza sagetile casetei la stanga si la dreapta in loc de in sus si in jos |
UDS_NOTHOUSANDS |
Impiedica afisarea separatorilor pentru mii (de regula, virgula) |
UDS_SETBUDDYINT |
Stabileste textul controlului insotitor cand utilizatorul modifica pozitia sagetilor de incrementare |
UDS_WRAP |
Creeaza o caseta de incrementare care afiseaza valorile de la cea mai mare la cea mai mica si invers |
Un control de incrementare nu se reduce numai la perechea de sageti. Daca doriti ca valoarea controlului sa fie vizibila pe ecran, trebuie sa asociati controlul de incrementare cu un control insotitor (buddy). Cand se modifica valoarea din controlul de incrementare, MFC actualizeaza automat controlul insotitor. In majoritatea cazurilor, controlul insotitor este un obiect CEdit. Dupa crearea controlului insotitor (m_spinEdit), trebuie sa creati controlul de incrementare (m_spin) si sa ii asociati acestuia controlul insotitor prin apelarea functiei SetBuddy().
m_spin.SetBuddy(&m_spinEdit);
Indicatoarele transmise functiei Create() a controlului de incrementare genereaza un control de incrementare care isi actualizeaza automat controlul insotitor, aliniaza sagetile in dreapta lui si ii permite utilizatorului sa manevreze sagetile de incrementare cu tastele directionale de la tastatura. Pozitia si marimea controlului sunt selectate toate pe zero deoarece aceste valori sunt determinate de dimensiunea si pozitia controlului insotitor.
Ca in cazul butonului glisant, trebuie configurat domeniul si pozitia controlului de incrementare:
m_spin.SetRange(1, 10);
m_spin.SetPos(5);
In tabelul urmator sunt prezentate toate functiile membru ale clasei CSpinButtonCtrl:
Create() |
Creeaza un buton de incrementare si il asociaza obiectului CSpinButtonCtrl |
GetAccel() |
Returneaza informatii despre acceleratorul controlului de incrementare |
GetBase() |
Returneaza baza curenta a controlului de incrementare |
GetBuddy() |
Returneaza un pointer catre controlul insotitor al controlului de incrementare |
GetPos() |
Returneaza pozitia curenta a controlului de incrementare |
GetRange() |
Returneaza limitele superioara si inferioara ale controlului de incrementare |
SetAccel() |
Stabileste acceleratia controlului de incrementare |
SetBase() |
Stabileste baza controlului de incrementare |
SetBuddy() |
Stabileste controlul insotitor al controlului de incrementare |
SetPos() |
Stabileste pozitia curenta a controlului de incrementare |
SetRange() |
Stabileste limitele superioara si inferioara ale controlului de incrementare |
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 912
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved