Casetă de dialog standard

1. Introducere

Biblioteca MFC include un număr de clase care reprezintă casete de dialog standard. Aceste clase vă permit să implementați cu ușurință astfel de operații frecvent utilizate, cum ar fi deschiderea și salvarea unui fișier, alegerea unei culori, selectarea unui font și așa mai departe. Toate aceste clase sunt moștenite de la CCommonDialog, care, la rândul său, derivă din clasa de bază a CDialog.

Iată clasele caselor de dialog standard și scopul acestora:

  • CColorDialog - Panou pentru selectarea culorilor
  • CFileDialog - Panoul de selectare a fișierelor pentru deschiderea și salvarea pe disc
  • CFindReplaceDialog - un panou pentru efectuarea unei operații de căutare și înlocuire
  • CFontDialog - Bara de instrumente pentru selectarea unui font
  • CPrintDialog - Panoul pentru imprimarea unui document
  • CPageSetupDialog - Panoul de selectare a formatului documentului
  • COleDialog - Bara de instrumente pentru gestionarea tehnologiei OLE

Clasele care gestionează casete de dialog standard sunt definite în fișierul afxdlgs.h. Prin urmare, atunci când utilizați aceste clase într-o aplicație, trebuie să includeți acest fișier în textul sursă utilizând directiva #include.

2. Panoul de selectare a culorilor (clasa CColorDialog)

Pentru a afișa pe ecran un dialog standard de selectare a culorilor, trebuie să creați un obiect de clasă CColorDialog și apoi să apelați metoda DoModal. Atunci când creați un obiect de clasă CSolorDialog, se utilizează următorul constructor:

Toți parametrii constructorului sunt opțional, dar în unele cazuri utilizarea acestor parametri poate ajuta.

Primul parametru, clrInit, vă permite să specificați culoarea implicită imediat după deschiderea casetei de dialog. Dacă opțiunea nu este specificată, culoarea implicită va fi neagră.

Parametrul dwFlags conține un set de steaguri care controlează caseta de dialog pentru selectarea culorilor. Cu aceasta, puteți bloca sau permite funcționarea unora dintre comenzile din caseta de dialog pentru selectarea culorilor. Dacă creați un CColorDialog obiect de clasă nu specificați parametrul dwFlags, cu toate acestea, puteți personaliza caseta de dialog prin contactarea elementului m_cc această clasă. Parametrul dwFlags specificat în constructor este utilizat pentru a inițializa m_cc. Modificările elementului m_cc trebuie făcute înainte ca panoul să fie afișat pe ecran.

Ultimul parametru pParentWnd poate fi utilizat pentru a specifica fereastra părinte a casetei de dialog.

Metode de clasificare C ColorDialog

Pentru a afișa caseta de dialog pentru selectarea culorilor pe ecran, trebuie să utilizați metoda DoModal. După afișarea panoului pe ecran, utilizatorul poate selecta culoarea din acesta și apăsați butoanele OK sau Anulare pentru a confirma selecția culorii sau pentru a o respinge. Când caseta de dialog este închisă, metoda DoModal returnează valorile IDOK și IDCANCEL, în funcție de butonul pe care l-a apăsat:

Caseta de dialog Culoare standard apare pe ecran. În jumătatea superioară a casetei de dialog sunt 48 de dreptunghiuri cu culori diferite. Ele reprezintă așa-numitele culori de bază. Puteți selecta una dintre aceste culori și faceți clic pe OK. După ce caseta de dialog este închisă (metoda DoModal și-a finalizat activitatea), puteți utiliza metodele din clasa CColorDialog pentru a afla culorile selectate de utilizator.

Pentru a determina culoarea selectată de utilizator, puteți să consultați metoda GetColor de clasă CColorDialog. Această metodă returnează valoarea COLORREF corespunzătoare culorii selectate.

Dacă utilizatorul nu are suficiente culori de bază prezentate în caseta de dialog Culoare, el poate selecta până la 16 culori suplimentare. Pentru a face acest lucru, trebuie să facă clic pe butonul DefineCustom Colors. Caseta de dialog își va schimba aspectul - apar controale suplimentare, permițându-vă să selectați oricare dintre cele 16 777 216 de culori. Când este selectată culoarea, faceți clic pe butonul Adăugați culori personalizate. Culoarea selectată va fi adăugată la culorile suplimentare (culori personalizate) - unul dintre dreptunghiurile libere va fi vopsit cu culoarea corespunzătoare.

Utilizând metoda GetSavedCustomColors din clasa CColorDialog, puteți defini culori suplimentare selectate de utilizator în caseta de dialog Culoare. Această metodă returnează un pointer la o matrice de 16 elemente COLORREF. Fiecare element al matricei descrie o culoare suplimentară.

Când caseta de dialog Culoare este afișată de aplicație pentru prima dată, toate dreptunghiurile care afișează culori suplimentare sunt albe. Culorile suplimentare selectate de utilizator sunt salvate în timpul executării aplicației. După ce aplicația este reluată, culorile suplimentare sunt resetate.

3. Panoul de selectare a fișierelor (clasa CFileDialog)

Dintre casetele de dialog standard pentru care este creată o clasă specială în biblioteca MFC, există panouri pentru a lucra cu sistemul de fișiere - Open și Save As. Caseta de dialog Deschidere vă permite să selectați unul sau mai multe fișiere și să le deschideți pentru o utilizare ulterioară. Caseta de dialog Salvare ca vă permite să selectați numele fișierului pentru a scrie în document.

Pentru a gestiona casetele de dialog Deschidere și Salvare ca, se intenționează o clasă de CFileDialog. Să considerăm constructorul de clasă CFileDialog mai detaliat:

Obiectele din clasa CFileDialog reprezintă casetele de dialog Open sau Save As, în funcție de parametrul bOpenFileDialog. Dacă parametrul bOpenFileDialog conține valoarea TRUE, atunci este creat un obiect care gestionează caseta de dialog Deschidere și dacă FALSE este caseta de dialog Salvare ca.

Parametrul bOpenFileDialog este singurul parametru necesar pentru a specifica. Parametrii rămași ai constructorului de clasă CFileDialog stabilesc diferite moduri ale funcționării panoului și nu pot fi specificate.

Pentru a crea un obiect de clasă CFileDialog. reprezentând o casetă de dialog pentru deschiderea fișierelor (mFileOpen), iar obiectul care reprezintă caseta de dialog pentru salvarea fișierelor (mFileSaveAs), puteți utiliza apeluri următorul constructor:

În multe cazuri, numele fișierelor pe care doriți să le deschideți sau să le închideți au o anumită extensie. Parametrul lpszDefExt vă permite să specificați extensia de fișier implicită. Adică, dacă utilizatorul nu specifică o extensie pentru a determina numele fișierului, numele fișierului este asociat automat extensiei implicite. Dacă programatorul atribuie parametrul lpszDefExt la NULL atunci când definește proprietățile casetei de dialog, atunci extensia fișierului trebuie specificată explicit de utilizator.

În unele cazuri, este necesar ca casetele de dialog să fie afișate cu numele fișierului deja selectat. Pentru a specifica numele de fișier implicit, utilizați parametrul lpszFileName. Dacă lpszFileName este NULL, această opțiune nu este implementată.

Cu dwFlags semnalați puteți schimba aspectul și alte caracteristici panouri clasa de dialog standard de CFileDialog. Poate scrie o combinație de steaguri care controlează diferitele caracteristici ale acestor panouri. De exemplu, OFN_HIDEREADONLY pavilion înseamnă că placa frontală este scoasă din comutatorul „Read Only“, și pavilion OFN_OVERWRITEPROMPT (utilizat pentru Salvare ca panou) - care este necesar pentru a afișa caseta de dialog cu un avertisment în cazul în care utilizatorul alege pentru a salva numele unui fișier existent.

Casetele de dialog pentru selectarea fișierelor au, de obicei, o listă de așa-numite filtre, inclusiv nume de tip de fișier și extensii de nume de fișiere de acest tip. Prin selectarea unui filtru, utilizatorul indică faptul că dorește să lucreze numai cu fișiere de un anumit tip care au extensia corespunzătoare. Fișierele cu alte extensii din casetele de dialog nu sunt afișate.

Lista de filtre poate fi specificată prin intermediul parametrului lpszFilter. Puteți specifica mai multe filtre în același timp. Fiecare filtru este specificat de două linii - un șir care conține numele filtrului și o linie în care sunt listate extensiile de nume de fișier. Dacă mai multe extensii corespund aceluiași tip, ele sunt separate prin simbolul. Un șir care conține numele filtrului este separat de linia cu extensii de fișiere de caracterul |. Dacă se utilizează mai multe filtre, ele sunt de asemenea separate una de alta de simbolul |. De exemplu, ca un șir de specificare a filtrelor, puteți utiliza un șir ca acesta:

Panourile de dialog, reprezentate de obiectele din clasa CFileDialog, pot sau nu să aibă o fereastră părinte. Pentru a specifica fereastra părinte, trebuie să transmiteți un pointer către constructorul CFileDialog prin intermediul parametrului pParentWnd.

Metode de clasificare CFileDialog

Crearea unui obiect CFileDialog nu afișează încă caseta de dialog corespunzătoare. Pentru a face acest lucru, utilizați metoda DoModal clasa CFileDialog.Pri apelată metoda DoModal create anterior pentru clasa obiect CFileDialog caseta de dialog corespunzătoare se deschide pe ecran. Odată ce utilizatorul iese din caseta de dialog, metoda DoModal returneaza IDOK sau IDCANCEL de succes, și zero, - în cazul unei erori:

După ce utilizatorul închide caseta de dialog și metoda DoModal returnează controlul, puteți utiliza alte metode ale clasei CFileDialog. Pentru a determina numele fișierelor selectate:

  • GetPathName - Specifică calea completă a fișierului
  • GetFileName - Specifică numele fișierului selectat
  • GetFileExt - Specifică extensia numelui fișierului selectat
  • GetFileTitle - Vă permite să definiți titlul fișierului selectat
  • GetNextPathName - Dacă caseta de dialog vă permite să selectați mai multe fișiere simultan, puteți utiliza această metodă pentru a determina calea completă a următorului fișier selectat
  • GetReadOnlyPref - Vă permite să cunoașteți starea atributului "numai pentru citire" al fișierului selectat
  • GetStartPosition - Returnează poziția primului element din lista de nume de fișiere

Cea mai importantă metodă este GetPathName. Se obține calea completă a fișierului selectat din casetele de dialog Deschidere sau Salvare ca. Dacă caseta de dialog vă permite să selectați mai multe fișiere în același timp, metoda GetPathName returnează o serie de șiruri constând din mai multe linii care se termină cu un zero binar. Prima dintre aceste linii conține calea spre directorul în care sunt localizate fișierele selectate, restul liniilor conțin numele fișierelor selectate. Selectarea unei linii care conține calea spre director nu cauzează probleme și pentru a obține numele fișierelor selectate, trebuie să utilizați metodele GetStartPosition și GetNextPathName.

Metoda GetStartPosition returnează o valoare de tip POSITION. Acesta este destinat să treacă la metoda GetNextPathName și să obțină următorul nume al fișierului selectat. Dacă utilizatorul nu a selectat niciun fișier, metoda GetStartPosition returnează NULL. Valoarea obținută prin această metodă trebuie să fie scrisă la o variabilă temporară de tip POSITION și să fie transmisă o trimitere la metoda GetNextPathName. Metoda GetNextPathName returnează calea completă a primului fișier selectat în panoul de dialog și modifică prin referință valoarea variabilei pos transmise metodei. Noua valoare pos poate fi utilizată pentru apelurile ulterioare la metoda GetNextPathName și pentru recuperarea căilor tuturor celorlalte fișiere selectate. Când metoda GetNextPathName returnează numele tuturor fișierelor selectate, valoarea variabilei pos este NULL.

Panourile Open și Save As au un buton radio "ReadOnly". Implicit, acest comutator nu este afișat. Dacă trebuie să utilizați acest switch, atunci trebuie să refuzați să utilizați pavilionul OFN_HIDEREADONLY.

Metoda GetReadOnlyPref vă permite să determinați poziția comutatorului "ReadOnly". Dacă comutatorul este activat, metoda GetReadOnlyPref returnează o valoare diferită de zero. În caz contrar, GetReadOnlyPref revine la zero.

4. Panoul de selecție a fontului (clasa CFontDialog)

Caseta de dialog pentru fonturi standard este utilizată pentru a selecta fontul. Acest panou afișează lista fonturilor instalate în sistem și vă permite să selectați numele fontului, fontul și alți parametri.

Pentru a gestiona caseta de dialog Font din biblioteca de clasă MFC, este inclusă clasa CFontDialog. Metodele din această clasă pot fi folosite pentru a afișa panoul Font și pentru a determina caracteristicile fontului selectat de utilizator. Constructor clasa CFontDialog:

Toți parametrii constructorului sunt opțional. Panoul implicit de selectare a fonturilor, care este executat de constructorul implicit al clasei CFontDialog, satisface majoritatea utilizatorilor.

Parametrul lplfInitial este un indicator pentru structura LOGFONT care descrie fontul logic. Dacă acest parametru este utilizat, fontul implicit în caseta de dialog este cel mai potrivit pentru fontul descris în structura LOGFONT.

Parametrul dwFlags specifică un set de steaguri care controlează diferitele moduri ale panoului de operare. De exemplu, CF_EFFECTS pavilion permite utilizatorului să creeze Subliniat și barată litere pentru a determina culoarea literelor, și CF_SCREENFONTS pavilion - permite să aleagă numai fonturile de ecran.

Folosind parametrul pdcPrinter, poți transmite designerului contextul de afișare al imprimantei, ale cărui fonturi vor fi prezentate în caseta de dialog Font. Acest parametru este utilizat numai dacă sunt specificate parametrii dFlaguri CF_PRINTERFONTS sau CF_BOTH.

Utilizând parametrul pParentWnd, puteți specifica fereastra părinte pentru caseta de dialog Font.

Metode de clasă CFontDialog

Pentru a afișa caseta de dialog Font, se intenționează metoda virtuală DoModal. Dacă utilizatorul selectează un font și a făcut clic pe OK, metoda DoModal returnează ID-ul IDOK, în cazul în care utilizatorul a anulat alegerea fontului, metoda DoModal returnează ID IDCANCEL:

Restul metodelor de clasă sunt destinate să determine caracteristicile fontului selectat de utilizator.

Metoda GetCurrentFont vă permite să determinați imediat toate caracteristicile fontului selectat scriind-le în structura LOGFONT.

Metodele rămase ale clasei vă permit să definiți numai anumite caracteristici ale fontului selectat:

  • GetFaceName - Returnează numele fontului selectat
  • GetStyleName - Returnează numele stilului fontului selectat
  • GetSize - Returnează dimensiunea fontului selectat
  • GetColor - Returnează culoarea fontului selectat
  • GetWeight - Returnează densitatea fontului selectat
  • IsStrikeOut - Stabilește dacă fontul este o linie marcată
  • IsUnderline - Stabilește dacă fontul este un subliniere evidențiată
  • IsBold - Stabilește dacă fontul este bold
  • IsItalic - Stabilește dacă fontul este înclinat

5. Panoul pentru imprimarea documentelor (clasa CPrintDialog)

Puteți utiliza clasa CPrintDialog pentru a crea două tipuri de casete de dialog pentru imprimarea documentelor și selectarea formatelor de documente. În plus față de clasa CPrintDialog, puteți folosi și clasa CPageSetupDialog. Acesta vă permite să creați o casetă de dialog pentru selectarea unui format de document care are un aspect ușor diferit.

În aplicațiile pregătite utilizând instrumentele MFC AppWizard și modelele bazate pe documente construite de model, în mod implicit este construită ieșirea documentului editat pentru imprimare.

Din meniul File al aplicației conține trei linii (Print, Print previzualizarea și Print Setup), care guvernează procesul de tipărire a documentelor întocmite în cerere. Pentru a imprima un document, selectați linia Print din meniul File. Apare caseta de dialog Print (Imprimare). Este posibil pentru a selecta dispozitivul de imprimare a documentelor de imprimare (Group Name), indicați va imprima întregul document sau o parte a acestuia (grupul gama de imprimare), precum și modul în care vor fi imprimate mai multe copii ale documentului (Copii Group). Puteți configura, de asemenea, diferite caracteristici ale dispozitivului de imprimare, dacă faceți clic pe butonul Properties din grupul imprimantei.

Dacă doriți să definiți numai imprimanta și formatul documentului, selectați Printer Setup (Configurare imprimantă) din meniul File (Fișier). În grupul Printer (Imprimantă), puteți specifica imprimanta și configurați-o în consecință. Grupul Hârtie specifică dimensiunea hârtiei și modul de alimentare cu hârtie pentru imprimantă. Grupul de orientare include un singur switch care determină orientarea hârtiei. Acesta presupune poziția Portret pentru orientarea verticală a imaginii pe hârtie (modul portret) sau Peisaj pentru orientarea orizontală a imaginii pe hârtie (modul peisaj).

Dacă nu este necesar să efectuați o prelucrare specifică a documentului înainte de imprimare, atunci nu este necesar să adăugați codul care este responsabil pentru procesul de imprimare. Rețineți că procedura de creare a panourilor asociate tipăririi unui document este aproape identică cu crearea câmpurilor de dialog standard de mai sus.

6. Panou pentru căutare și înlocuire (clasa CFindReplaceDialog)

Clasa CFindReplaceDialog este utilizată pentru a gestiona casetele de dialog Găsire și Înlocuire. Caseta de dialog Găsire este utilizată pentru a căuta șiruri de caractere cunoscute în documentul aplicației, iar panoul Înlocuire vă permite să înlocuiți o linie cu alta.

O diferență importantă între casetele de dialog Găsire și înlocuire din alte casete de dialog standard este că acestea sunt casete de dialog fără moduri. Prin urmare, procesul de creare a acestor panouri este semnificativ diferit de procesul de creare a panourilor standard pentru selectarea numelor de culori, fonturi și fișiere.