6 Notepad și unele magice

6 BLOCURI ȘI O MAGICĂ LITTLE

Dacă aplicația dvs. este complexă și are un număr mare de parametri, trebuie să vă gândiți cu atenție la modul în care utilizatorul îi va configura. În mod tipic, un sistem cu mai multe niveluri de meniuri imbricate și o grămadă de casete de dialog care sunt chemați unul de celălalt sunt sugerate pentru configurare, dar acest lucru nu este deloc ceea ce este mulțumit de utilizator.







Dacă te uiți, se pare că setările de sistem, de exemplu, Microsoft Word pentru versiunea 6.0 aplicație Windows, veți vedea că acesta este organizat sub forma unui caiet, care este format din mai multe panouri de dialog cu file (fig. 6.1). Aparent, aceasta este opțiunea cea mai de succes, deoarece utilizatorul poate găsi cu ușurință și selecta grupul de parametri de care are nevoie.

Fig. 6.1. Notepad setările în Microsoft Word pentru Windows versiunea 6.0

Implementarea notebook-ului utilizând interfața software Microsoft Windows 3.1 nu este ușoară, dar sistemul de operare Microsoft Windows 95 are un instrument încorporat care facilitează foarte mult crearea acestor setări. Acest instrument este comenzile Tab și proprietăți.

Controlul Tab arată ca un set de marcaje (partea de sus a Figura 6.1). Acesta poate fi utilizat singur (sursa TABCTRL aplicațiile respective sunt în SDK), dar ne limităm la caz, care este mai frecventă - folosindu-l ca parte a Autorității de Management Property Sheet, care va fi numit Notepad.

Controlul Sheet de proprietăți în Microsoft Windows 95 arată puțin diferit față de notepad-ul prezentat în Fig. 6.1. Pentru comparație, puteți să vă uitați la Fig. 1.6, situat în primul capitol, sau în Fig. 6.2 (vezi mai jos). Diferența este că butoanele de control ale Notepad-ului (OK, Anulare, Ajutor și Aplicare) se află în partea de jos a ferestrei Notepad.

Cum funcționează aceste butoane?

Dacă faceți clic pe OK, se vor seta noi setări, apoi fereastra Notepad va dispărea de pe ecran. Așa cum vă puteți aștepta, folosind butonul Anulare, puteți anula modificările la setări. Butonul Ajutor oferă acces la sistemul de ajutor.

Butonul Aplicați vă permite să modificați setările și să vedeți modul în care aceste modificări afectează aplicația. Dacă faceți clic pe acest buton, fereastra Notepad rămâne pe ecran, deci dacă noua combinație de parametri nu vă satisface, puteți încerca o altă combinație de parametri. În acest caz, nu trebuie să selectați o linie din meniul care apelează notepad-ul pe ecran.

Acum despre magie.

Bineînțeles, cartea noastră nu este despre vrăjitorie sau despre magie, dar utilizatorii o plac atunci când programele ei înșiși efectuează toată munca pentru ei sau cel puțin o parte din lucrare (ceea ce nu este magic?). Cu toate acestea, indiferent de cât de "inteligent" este programul dvs., trebuie să întrebați întrebările utilizatorului sau să le puneți înainte de a alege diferitele alternative atunci când efectuați sarcini într-un mod semi-automat.

Deși Microsoft Windows 95 nu conține controale magice, capacitatea de a face cu orice serviciu de pe acest sistem de operare are încă un instrument care vă permite să organizați cu ușurință un dialog cu utilizatorul în procesul de execuție semi-automată a anumitor sarcini. Un exemplu poate servi ca dialog atunci când instalați sistemul de operare Microsoft Windows 95. Acest instrument este controlul Wizard (în traducere înseamnă "vrăjitor", totuși ne abținem de la o astfel de terminologie).

Expertul. precum și un notebook, este un set de casete de dialog (Figurile 1.7, 6.6, 6.7 și 6.8). Diferența este că, în notebook-ul utilizatorul are acces la oricare din caseta de dialog, împingându-l înainte cu ajutorul marcajelor, în corpul de control Wizard, acesta se mută de la un panou la altul și înapoi din nou, folosind butoanele Înapoi și Înainte. Când este atinsă ultima casetă de dialog, butonul Următor este înlocuit cu butonul de Finalizare. Merită să o apăsați și. (Oh, un miracol!) Totul se va face.

În ciuda acestor diferențe, controalele Property Sheet și Wizard sunt foarte asemănătoare între ele (nu în aspect, ci în modul în care sunt create și gestionate). Prin urmare, le vom examina într-un singur capitol.

În primul rând, să examinăm controlul Sheet de proprietăți.

Pentru a crea un control al Sheet de proprietate, trebuie să faceți următoarele:
  • Pregătiți șabloanele de casetă de dialog în resursele aplicațiilor (deși pot fi create dinamic);
  • pregăti funcțiile de dialog pentru fiecare panou de dialog (este posibilă utilizarea aceleiași funcții de dialog pentru mai multe panouri care conțin aceleași comenzi);
  • creați și completați o serie de structuri de tip PROPSHEETPAGE. fiecare element din care descrie o pagină separată a notebook-ului;
  • creați și umpleți o structură ca PROPSHEETHEADER. descriere notepad;
  • crea pagini individuale utilizând funcția Notepad CreatePropertySheetPage și apoi a afișa PropertySheet funcția de notebook-uri (așa cum vom vedea în continuare, este posibil să se facă fără funcție CreatePropertySheetPage care simplifică procesul de creare a notebook-ului).






O dată vom observa că pentru crearea unui expert al corpului de control este necesar să se folosească aceeași procedură. Diferențele sunt în completarea structurilor și procesarea mesajelor în funcțiile dialogului.

Luați în considerare pașii enumerați mai sus în detaliu.

Pregătirea șabloanelor de dialog

Șablonul pentru caseta de dialog este pregătit în mod obișnuit utilizând mediul de dezvoltare integrat Microsoft Visual C ++. Singurul lucru pe care ne-ar plăcea să-i acordăm atenția: în paginile Notepadului și Expertul nu există butoane OK, Anulare și Ajutor, deoarece aceste butoane se referă la întregul notebook și se află în partea de jos a ferestrei. În caz contrar, șabloanele de pagini ale notebook-ului nu diferă de casetele de dialog obișnuite.

Funcția de dialog a paginii Notepad

Spre deosebire de funcția obișnuită de dialog, funcția de dialog pentru pagina Notepad sau Control Wizard nu apelează funcția EndDialog. deoarece aceasta ar conduce la distrugerea organului de conducere. Iată un exemplu de funcție de dialog pentru pagina Notepad, preluată din aplicația Demo Sheet de proprietăți, codul sursă complet al căruia veți găsi mai jos în secțiunea "Demo de proprietăți a foii de proprietăți":

Ca și în funcția ferestrei principale a aplicației, am folosit macrocomanda convenabilă HANDLE_MSG în funcția de dialog pentru organizarea procesării mesajelor.

Pregătirea unei game de structuri PROPSHEETPAGE

Pentru fiecare pagină a programului Notepad sau Wizard, trebuie să pregătiți o structură PROPSHEETPAGE. scriind în ea descrierea paginii. Structura PROPSHEETPAGE este definită după cum urmează:

Poate că această structură pare oarecum greoaie, dar umplerea ei nu vă va face dificultăți.

În câmpul dwSize, trebuie să înregistrați dimensiunea structurii, adică valoarea sizeof (PROPSHEETPAGE).

În câmpul dwFlags, trebuie să scrieți steaguri care indică câmpurile de structură implicate și să determinați apariția controlului. Aici puteți utiliza următoarele valori:

În aplicația noastră am folosit pavilioanele PSP_USETITLE și PSP_USEICONID.

Câmpul hInstance trebuie să conțină identificatorul aplicației, care este trecut prin parametrul corespunzător al funcției WinMain.

Campurile pszTemplate și pResource sunt combinate, astfel încât să puteți utiliza doar unul dintre ele. În mod implicit, trebuie să scrieți un identificator de resurse în câmpul pszTemplate care conține șablonul casetei de dialog. Cu toate acestea, specificând pavilionul PSP_DLGINDIRECT, puteți crea șablonul de dialog dinamic în RAM și scrieți un pointer la acest șablon în câmpul pResource.

În mod similar, câmpurile hIcon și pszIcon sunt combinate. Dacă intenționați să scrieți ID-ul pictogramei în câmpul pszIcon care va fi afișat în fila, trebuie să specificați pavilionul PSP_USEHICON. Dacă pictograma este definită în resursele aplicației, trebuie să scrieți identificatorul corespunzător al resurselor în câmpul pszIcon și să specificați pavilionul PSP_USEICONID.

În cazul în care nu aveți nevoie pentru a afișa o pictogramă de pe fila, nu specificați steagurile și PSP_USEHICON PSP_USEICONID, și câmpul pszIcon (sau HICON, că unul și același) scrie NULL.

Când creați un șablon de casetă de dialog, puteți specifica titlul acestuia. În schimb, puteți folosi câmpul pszTitle și pavilionul PSP_USEICONID.

Iată cum am completat câmpurile structurii PROPSHEETPAGE pentru trei pagini de note din aplicația Demo Sheet de proprietate:

Completarea structurii PROPSHEETHEADER și crearea unui notebook

Structura PROPSHEETHEADER. după cum se poate vedea din titlul său, descrie titlul notebook-ului. Are următorul format:

În câmpul dwSize, trebuie să înregistrați dimensiunea structurii.

Câmpul dwFlags poate conține o combinație logică a următoarelor valori:

Vrăjitorul este creat, nu Fișa de proprietăți a Notepad-ului

În aplicația Demo Sheet de proprietate, am populat structura PROPSHEETHEADER după cum urmează:

După ce ați terminat antetul foarfecii, puteți crea un notepad (sau controlul Wizard dacă este specificat steagul PSH_WIZARD) utilizând funcția PropertySheet.

Există un alt mod de a crea un notepad sau un control Wizard fără a utiliza funcția CreatePropertySheetPage. Am aplicat această metodă în aplicația Wizard Demo:

Aici nu folosim pictograma, deoarece nu este încă afișată, astfel că câmpul pszIcon este setat la NULL. În plus, sunt specificate steagurile PSH_PROPSHEETPAGE și PSH_WIZARD.

Următoarele coduri de notificare sunt definite pentru comenzile Specificați foaia și Expertul:

Această notificare este transmisă funcției de dialog atunci când este activată pagina corespunzătoare a comenzii Notepad sau Wizard. Managerul de notificări poate efectua toate acțiunile de inițializare necesare

Pagina este mutată în fundal sau scoasă din ecran. Procesorul acestei notificări poate verifica valorile introduse de utilizator și, dacă acestea sunt incorecte, blocarea comutării către alte pagini ale notebook-ului

Această notificare este trimisă atunci când utilizatorul face clic pe butonul OK sau Aplică

Notificarea PSN_HELP este trimisă când utilizatorul face clic pe butonul Ajutor

Notificarea PSN_QUERYCANCEL este trimisă când utilizatorul face clic pe butonul Anulare, intenționând să închidă notepad-ul. Operatorul poate dezactiva această acțiune, de exemplu, dacă utilizatorul nu a specificat parametrii necesari

Această notificare este trimisă după notificarea PSN_QUERYCANCEL, în cazul în care distribuitorul acesteia nu a interzis închiderea notebook-ului

Este trimis atunci când utilizatorul apasă butonul Înapoi din comanda Expert

Trimise când utilizatorul face clic pe butonul Următorul din comanda Expert

Acesta este trimis atunci când utilizatorul apasă butonul de finalizare din controlul Wizard

Operatorii de mesaje pot returna FALSE sau TRUE, dar în majoritatea cazurilor este necesar să setați codul de ieșire din structura de date de dialog utilizând funcția SetWindowLong. În acest caz, valoarea DWL_MSGRESULT trebuie specificată ca al doilea parametru pentru această funcție.

În următorul fragment de cod, care este preluat din aplicația "Demonstrație foaie de proprietăți", este verificată lungimea șirului szTempBuf. Dacă este mai mare de 8, valoarea returnată este TRUE și dacă este mai mică - FALSE:

Pentru mai multe informații despre utilizarea acestor notificări, consultați Ajutorul SDK. Cele mai necesare vor fi descrise în secțiunile "Demo de proprietate a aplicației" și "Wizard Demo".

stivuitoare de mesaje, situate în funcțiile de dialog pot trimite foi de proprietate și Expertul controlează diverse rapoarte prin adăugarea sau eliminarea de pagini individuale, prin schimbarea stării butoanelor, cum ar fi următoare sau Apply, și așa mai departe. D.

Mai jos am enumerat o listă a acestor mesaje cu o scurtă descriere.

Adăugarea unei noi pagini la sfârșitul notebook-ului

Acțiunea acestui mesaj este echivalentă cu butonul Aplicați. Pagina curentă va primi o notificare cu codul PSN_KILLACTIVE

Dacă trimiteți acest mesaj, apare butonul Închidere în locul butonului Anulare. Utilizată în cazurile în care utilizatorul a făcut astfel de modificări, care nu mai pot fi aruncate

Acest mesaj va debloca butonul Aplicați

Cu ajutorul acestui mesaj puteți afla identificatorul fila de control (în cartea noastră nu este descrisă), care este folosit pentru a crea marcaje în Notepad

Cu acest mesaj, puteți simula funcționarea butoanelor de control Notepad sau Wizard, cum ar fi, de exemplu, OK, Next sau Finish

Trimiterea unui mesaj către funcțiile dialogului tuturor paginilor din notebook







Articole similare

Trimiteți-le prietenilor: