Casete de Dialog particularizate

Cererea poate crea casete de dialog particularizate utilizând o clasă definită de cerere fereastră pentru casetele de dialog în loc de utilizarea clasa de caseta de dialog predefinite. Cererile de obicei utilizați această metodă atunci când o casetă de dialog este lor fereastra principală, dar, de asemenea, este util pentru crearea de casete de dialog modal și fără mod pentru aplicații care au windows standard suprapuse.

Clasa definite de aplicarea fereastra permite aplicarea să se definească o procedură de fereastra de dialog cutie și procesul mesajele înainte de a le trimite la procedura de caseta de dialog. De asemenea, permite aplicarea defini o pictogramă de clasă, o perie de fundal de clasă și un meniu pentru clasa pentru caseta de dialog. Cererea trebuie să se înregistreze clasa fereastră înainte de a crea o casetă de dialog ?i să furnizeze șablonul de caseta de dialog atom valoarea sau numele clasei fereastra.

Multe aplicații creați o nouă clasă de caseta de dialog de prima regăsirea informa?iilor clasă pentru clasa de caseta de dialog predefinite, și trece la funcția de GetClassInfo , care umple o structură WNDCLASS cu informații. Aplicarea modifică membrii individuali din structura, cum ar fi numele clasei, pensulă și pictogramă, apoi registrele clasa nou utilizând funcția RegisterClass . În cazul în care o cerere umple structura WNDCLASS pe cont propriu, ea trebuie să setați membru cbWndExtra la DLGWINDOWEXTRA, care este numărul de octeți suplimentare sistemul necesită pentru fiecare casetă de dialog. Dacă o aplicație utilizează, de asemenea, octeți suplimentare pentru fiecare casetă de dialog, trebuie să fie dincolo de octeți suplimentare cerute de sistemul de.

Procedura fereastra pentru caseta de dialog particularizate are aceeași parametri și cerințele ca orice altă procedură fereastra. Spre deosebire de alte proceduri de fereastră, cu toate acestea, procedura fereastra pentru această casetă de dialog ar trebui să apel funcția DefDlgProc în loc de funcția DefWindowProc pentru orice mesaje acesta nu proces. DefDlgProc efectuează același mesaj implicit prelucrare ca procedura fereastra pentru caseta de dialog predefinite, care include modul de caseta de dialog de apelare.

Cererea poate crea, de asemenea, casete de dialog particularizate de subclassing procedura fereastră din caseta de dialog predefinite. Funcția SetWindowLong vă permite să o cerere seta adresa din fereastra procedura pentru o fereastră dată. Cererea poate, de asemenea, încerca să subclasă utilizând funcția de SetClassLong , dar face atât afectează toate casetele de dialog din sistem, nu doar cele care fac parte din aplicarea.

Cererile care creează casete de dialog particularizate uneori oferă o interfață tastatură alternativ pentru casetele de dialog. Pentru casete de dialog fără mod, aceasta poate însemna cererea nu apela funcția IsDialogMessage și în schimb procesează toate tastatură intrare în procedura fereastra particularizate. În astfel de cazuri, cererea poate utiliza mesajul WM_NEXTDLGCTL pentru a minimiza codul necesare pentru a deplasa focalizarea intrare la un control la altul. Acest mesaj, atunci când a trecut la DefDlgProc, se mută accentul intrare la un control specificată și actualizează aspectul controalelor, cum ar fi mutarea frontiera push button implicit sau setarea un buton radio automată.