Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Controale comune - Bara de evolutie si Butonul glisant

c



+ Font mai mare | - Font mai mic



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



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 836
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved