Cunoaște Intuit, curs, clasa biblioteca MFC

Controale și dialoguri

Dialoguri. Relația cu controale

Dialog (caseta de dialog) este un tip special de ferestre care sunt proiectate pentru a interacționa cu utilizatorul. De obicei, acestea sunt utilizate pentru a modifica setările aplicației și introduceți informații. De exemplu, aproape toate ferestrele din setările Microsoft Word sunt dialoguri. Există două tipuri de dialoguri: modal și fără moduri. Cele mai frecvente primele. În cazul casetelor de dialog modale, cu un dialog consolidat fereastra principală a aplicației devine pasivă și nu răspunde la acțiunile utilizatorului, atâta timp cât el nu se închide fereastra de dialog. În dialoguri caz fără moduri, există dialog independent de celelalte ferestre, și, de asemenea, fereastra principală poate fi activat.

Interacțiunea dintre dialogul și utilizatorul

Interacțiunea dintre dialogul și utilizatorul se realizează prin intermediul elementelor de comandă. Acesta este un tip special de intrare sau de ieșire ferestre. Controlul aparțin ferestrei titularului, în acest caz - dialogul. Toate versiunile de Windows suporta un set de controale standard, care includ butoane, comutatoare de comandă, butoane de selectare, liste, câmpuri de intrare, casetele combo, barele de defilare, și elemente statice.

Să ne examinăm pe scurt fiecare dintre ele:

  • Butonul ordinară (buton) - acesta este butonul care „face clic pe“ utilizatorul mouse-ul sau tasta Enter, se deplasează pre-ei se concentrează.
  • comutator de control (caseta de validare, caseta de validare) poate fi fie selectat sau nu. Dacă dialogul are mai multe switch-uri de control, care pot fi selectate în același timp, câteva dintre ele.
  • Buton Intercom (buton radio) - aceasta este aproape la fel ca cea a comutatorului de control. Diferența este că, în cazul în care există mai multe, numai unul poate fi selectat de butoanele din grup.
  • Listă (caseta listă) conține un set de linii din care pot fi selectate una sau mai multe. Utilizate pe scară largă la afișarea numelor de fișiere.
  • câmp de intrare (caseta de editare) - este elementul care vă permite să introduceți un șir de caractere de text.
  • Combo (caseta combo) este o listă cu linia de intrare.
  • element static (control static) este proiectat pentru a afișa text sau grafice, dar nu pentru a intra.

Controalele pot genera atât mesaje de răspuns la acțiunile utilizatorului, și să le primească de la aplicație. În acest din urmă caz, mesajele sunt, de fapt, echipa pe care controlul ar trebui să răspundă.

clasa MFC pentru controale

MFC oferă cursuri pentru toate controalele standard. Aceste clase descriu elementele ei înșiși, și conțin, de asemenea caracteristici pentru a lucra cu ei. Acestea se numesc cursuri de management. Acestea sunt generate din clasa CWnd. Astfel, ei au toate caracteristicile ferestrei. Aici sunt clasele de management de bază:

În MFC a admis apelul direct la controalele, dar, în practică, se întâmplă foarte rar. Mai convenabil de a utiliza clasele corespunzătoare. Cele mai frecvent utilizate controale cu casete de dialog, dar puteți crea și anumite elemente din fereastra principală.

Dialoguri ca resursă

În MFC, toate dialogurile sunt instanțe ale unei clase de CDialog. sau clase generate de acesta. Numai dialogurile cele mai simple utilizate de clasă în mod direct CDialog. În cazul general, trebuie să definiți propria clasă. clasa CDialog are un constructor cu următorul prototip:

Parametrul ResourceName specifică ID-ul sau RESOURCEID resursă dialog, sau un șir de caractere numeric. Parametrul Proprietar - un pointer la fereastra-proprietar, în cazul în egală cu 0, atunci proprietarul va fi fereastra principală a aplicației. Forma recentă a constructorului este de a crea un dialoguri non-modale.

Prelucrarea mesajelor din dialogurile

Toate dialogurile sunt o varietate de ferestre, astfel încât acestea utilizează același motor de mesagerie precum și pentru fereastra principală. Pentru fiecare dialog organizat propria coadă de mesaje, la fel ca și pentru fereastra principală. În cazul în care controlul dialogului este activat, Dialog a trimis un mesaj WM_COMMAND. Cu acest mesaj este transmis identificatorul de control. Pentru a gestiona mesajele pe card pentru a plasa dialogul ON_COMMAND () macro. Multe controale generează, de asemenea, un cod de identificare, care vă permite să se determine ce acțiuni a fost efectuată cu controlul. În multe cazuri, acest cod este selectat unul sau altul handler.

Apelați un dialog modal

După crearea unei clase de obiecte de dialog, apelați DoModal funcția de membru (). Rezultatul apelului va fi afișarea unui dialog modal. Prototipul următoarele funcții:

int virtuale CDialog :: DoModal ();

Funcția returnează un cod de finalizare generat atunci când închiderea dialogului, sau -1 în cazul în care fereastra nu poate fi afișată. În cazul în care structura dialogului a apărut o eroare, se întoarce IDABORT. Funcția nu se întoarce până când dialogul nu va fi închis.

Închiderea unui dialog modal

În mod implicit, dialogul se închide atunci când primiți un mesaj cu identificatorul sau IDOK. sau IDCANCEL. Acestea sunt predefinite și sunt de obicei asociate cu butoanele și confirma anularea. Clasa CDialog conține procesoare integrate pentru aceste două cazuri, OnOK () și OnCancel (). Ei nu au nevoie să includă în dialogul coada de mesaje. Cu toate acestea, ele pot trece peste faptul că permite programatorului să controleze închiderea dialogului. Pentru a închide programatică caseta de dialog care aveți nevoie pentru a apela o funcție de membru cu prototipul:

anula CDialog :: EndDialog (int RetCode);

Acest parametru determină valoarea pe care funcția returnează DoModal (). Valoarea IDOK sau IDCANCEL revin de obicei. alte valori sunt rar folosite.

De multe ori, în practică, o situație apare în cazul în care diferite variabile și controale asociate cu dialogul trebuie să fie inițializat înainte să se afișeze dialogul. Pentru a permite un dialog pentru a efectua astfel de acte, Windows trimite automat mesajul WM_INITDIALOG să-l în momentul creației. Dacă primiți acest mesaj MFC apelează automat metoda OnInitDialog (). care este un procesor standard, specificat în clasa CDialog. Această caracteristică este înlocuită în program, dacă este necesar intializare. prototip Funcția:

virtuale BOOL CDialog :: OnInitDialog ();

Funcția se numește înainte de a se afișează dialogul. Ar trebui să se întoarcă adevărat. astfel încât Windows poate transfera focalizarea de intrare (de ex., e. pentru a face activ) primul element din fereastra de control. Prima acțiune de a fi funcția supradeterminat apelează funcția CDialog :: OnInitDialog ().

dialoguri non-modale primi mesaje în paralel cu fereastra principală a aplicației. Aceasta este, cel puțin două ferestre sunt active simultan. De aceea, lucrul cu dialoguri non-modal necesită mai mult efort - operațiuni suplimentare care urmează să fie efectuate. Pentru a crea un dialog non-modal, trebuie să creați un obiect „gol“ de dialog, care nu este asociat cu un model de resurse. Legarea la resurse prin intermediul funcției Create (...). Să examinăm acest proces mai detaliat. Pentru a crea un dialog obiect non-modal, CDialog :: CDialog () constructorul ar trebui să fie utilizat fără parametri. El a declarat ca membru de clasă protejată. Acest lucru înseamnă că poate fi numit numai din interiorul unei clase generate functie membru. Acest lucru se face astfel încât programator determină în mod necesar clasa generat pentru un dialog non-modal, și a determinat-o operațiuni suplimentare de dialog non-modal. Când este creată o instanță, este legată de resurse cu funcțiile:

Utilizarea dialogului ca fereastra principală

Utilizarea dialogului ca fereastra principală este de multe ori foarte convenabil. Punerea în aplicare acest caz, este destul de simplu. În primul rând, trebuie să creați o resursă de dialog. În al doilea rând, de a genera o clasă de aplicații CDialog fereastra principală. Înainte de principalul constructor fereastra de clasă, trebuie să sunați la constructorul clasei CDialog. iar obiectul acesteia este de a lega la resurse, cum ar fi:

În al treilea rând, în funcție de CAPP :: InitInstance () trebuie să fie prezent următorul cod:

articole similare