Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Pentru fiecare box de dialog care apare pe ecran exist dou entiti pe care trebuie s le dezvoltm: o resurs box de dialog i o clas box de dialog. Resursa box de dialog este folosit pentru a desena boxa de dialog i controalele pe care le conine. Clasa menine valorile din boxa de dialog i exist o funcie membru a acestei clase care este folosit pentru a activa boxa de dialog. n general se construiete un meniu ce va conine o opiune pentru activarea acestui dialog. Resursa box de dialog se construiete cu editorul de resurse. Pe baza acestei resurse Class Wizard va genera clasa corespunztoare. n general boxele de dialog sunt derivate din CDialog.
Scrollbar. int
Pentru a afia boxa de dialog va trebui s apelm funcia membru DoModal() n cazul boxelor de dialog modale. Boxele de dialog amodale vor fi tratate separat, deoarece nu urmeaz aceeai construcie.
Tiprirea codului (Autocompletion: Tools->Options->Editor) Cnd tastm codul avem posibilitatea de a vedea numele variabilelor membru i a funciilor din clas. Dac tastm dlg. i apoi pauz, va aprea o fereastr, ce va lista toate variabilel membru i funciile din clas, inclusiv cele motenite din clasa de baz. n continuare vom folosi tastele sgei pentru selecie i apoi apsm tasta Space pentru a trece selecia fcut n cadrul codului.
OBSERVAIE: Anumite funcii DDX nu sunt generate de Class Wizard. De exemplu, cnd ne conectm la o valoare din List Box, singura alegere posibil pentru tip este CString. Alegnd acest lucru, Class Wizard va genera un apel la DDX_LBString() care conecteaz stringul selectat la variabila membru de tip CString. Exist situaii cnd un index de tip int este mai bun. Pentru acest lucru exist funcia DDX_LBIndex() care realizez acest schimb de informaii. O parte dintre funciile din List Box folosesc indeci pentru a manevra articolele dintr-un list box. Putem aduga cod n DodataExchange(), dar n afara comentariilor speciale introduse de Class Wizard. n acest caz vom aduga singuri variabila membru la clas.
Funciile care ncep cu DDV realizeaz validarea datelor. Prametrul al doilea este numele variabilei, iar al treilea specific limitele.
Aceast funcie apeleaz mai nti OnInitDialog() din clasa de baz, iar n continuare se execut codul din cadrul funciei. Stringurile vor fi afiate n ordinea n care au fost introduse (adugate) cu funcia AddString(). n final se apeleaz funcia SetCurSel(), funcie care are drept parametru un index ce identific articolele din List Box. Indexul pentru primul articol are valoarea 0 (zero).
OBSERVAIE: n mod obinuit, articolele n list box sunt adugate dintr-un vector sau o list. Pentru acest lucru se folosesc clasele colecie din MFC (CStringArray, CList, etc.).
Pentru a menine (memora) articolul (string-ul) selectat n list box, vom aduga o variabil membru de tip CString la aceast clas. Aceast variabil va fi privat, i deci vom aduga funcii membru publice la clas pentru a manevra aceast variabil pentru a pstra stilul de programare impus de POO. Pentru selecie se va trata mesajul de notificare BN_CLICKED, care are semnificaia c utilizatorul a fcut o selecie n list box. Funcia care trateaz acest mesaj se va aduga tot cu Class Wizard. n codul care urmeaz se exemplific preluarea stringului din list box la apsarea butonului OK. void CSdiDialog::OnOK() { int index = m_listbox.GetCurSel(); if (index != LB_ERR) { m_listbox.GetText(index, m_selected); } else { m_selected = ""; } CDialog::OnOK(); } Explicaii. Funcia GetCurSel() ntoarce indexul la articolul selectat. Dac acesta este valid (index != LB_ERR) se obine valoarea acestui articol n variabila m_selected care este de tip CString folosind funcia GetText al crei prim parametru este indexul articolului.. n final se apeleaz funcia OnOK() din clasa de baz pentru a executa alte procesri necesare. n cele ce urmeaz vom observa apeluri la funciile din clasa de baz. Aceste apeluri sunt generate de Class Wizard. Exist i excepii cnd aceste apeluri trebuiesc invalidae (comentate). Ca un exemplu vom vedea la mprtirea zonei client n mai multe ferestre (splitting window) la apelul funciei OnCreateClient().