Explorer-stil egendefinerte maler

Du vil definere flere kontroller for et Explorer-stil Åpne eller Lagre som -dialogboksen, kan du bruke OPENFILENAME -strukturen til å angi en mal for en underordnet-dialogboks som inneholder flere kontroller. Hvis malen for barn-dialogboksen er en ressurs i et program eller en DLL-bibliotek, sette OFN_ENABLETEMPLATE-flagget i flagg -medlem og bruker hInstance og lpTemplateName medlemmer av strukturen til å identifisere navnet på modulen og ressurs. Hvis malen er allerede i minnet, sette OFN_ENABLETEMPLATEHANDLE-flagget og bruker hInstance -medlem for å identifisere minneobjektet som inneholder malen. Når du gir et barn dialogboksen mal for dialogboksen en Explorer-stil, må du også angi flagget OFN_EXPLORER; Hvis ikke, antar systemet du er å gi en erstatning-mal for en gammel stil-dialogboksen. Vanligvis, hvis du gi flere kontroller, må du også oppgi en Explorer-stil krok prosedyren til prosessen meldinger for nye kontroller.

Du kan opprette malen barn dialogboksen-boksen som du gjør en annen mal, bortsett fra at du må angi stilene for WS_CHILD og WS_CLIPSIBLINGS, og bør angi stilene for DS_3DLOOK og DS_CONTROL. Systemet krever WS_CHILD-stil fordi malen definerer en underordnet dialogboksen standard Åpne eller Lagre som dialogboksen. WS_CLIPSIBLINGS-stil sikrer at dialogboksen barn ikke male over noen av kontrollene i dialogboksen standard. Stilen DS_3DLOOK sørger for at utseendet til kontrollene i dialogboksen barn er konsekvente med kontrollene i dialogboksen standard. Stilen DS_CONTROL sørger for at brukeren kan bruke kategorien og andre navigasjonstastene til å flytte mellom alle kontroller, standard eller egendefinert i dialogboksen tilpassede.

For å gjøre plass til de nye kontrollene, utvider systemet dialogboksen standard av bredden og høyden på den egendefinerte dialogboksen. Som standard er alle kontroller fra den egendefinerte dialogboksen plassert nedenfor kontrollene i dialogboksen standard. Du kan imidlertid overstyre denne standard plassering ved inkludert en statisk tekst-kontroll i den egendefinerte dialogboks boksen malen og tilordne den identifikatorverdi for kontroll av stc32. (Denne verdien er definert i DLG.H hovedpostfil.) I dette tilfellet, bruker systemet kontrollen som referansepunkt for å bestemme hvor du skal plassere de nye kontrollene. Alle nye kontroller over og til venstre for kontrollen stc32 er plassert like mye over og til venstre for kontrollene i dialogboksen standard. Nye kontroller under og til høyre for kontrollen stc32 er plassert under og til høyre for standard kontrollene. Hver enkelt nye kontroll plasseres Generelt, slik at den har den samme plasseringen i forhold til standard-kontrollene slik det måtte stc32-kontrollen. For å gjøre plass for disse nye kontroller, vil systemet legge til plass til venstre, høyre, bunn og toppen av dialogboksen standard etter behov.

Systemet krever hook-prosedyre til å behandle alle meldinger som er beregnet for den egendefinerte dialogboksen, og derfor sender samme vinduet meldingene til Bindingsprosedyren som til andre dialogboksen-boksen prosedyre. For eksempel mottar Bindingsprosedyren WM_COMMAND meldinger når brukeren klikker på knappekontrollene i den egendefinerte dialogboksen. Bindingsprosedyren er ansvarlig for initialisering av disse kontrollene og henter verdiene fra kontrollene når dialogboksen er lukket. Legg merke til at når Bindingsprosedyren mottar meldingen WM_INITDIALOG , systemet ikke har ennå flyttet kontrollene til sine endelige plasseringer.

Standard dialogboksen boksen prosedyre håndterer meldinger for alle kontrollene i dialogboksen standard, men Bindingsprosedyren mottar den WM_NOTIFY varselmeldinger for brukerhandlinger på disse kontrollene som beskrevet i Explorer-stil Hook prosedyrer.