Öppna och spara som-dialogrutor
Not
Funktionen GetOpenFileName visas i -filen används.
[Från och med Windows Vista har Öppna och Spara som vanliga dialogrutor ersatts av dialogrutan gemensamt objekt. Vi rekommenderar att du använder DIALOG-API:et för gemensamt objekt i stället för dessa dialogrutor från det gemensamma dialogrutebiblioteket.]
I dialogrutan Öppna kan användaren ange enheten, katalogen och namnet på en fil eller uppsättning filer som ska öppnas. Du skapar och visar en dialogruta Öppna genom att initiera en OPENFILENAME- struktur och skicka strukturen till funktionen GetOpenFileName.
I dialogrutan Spara som kan användaren ange enheten, katalogen och namnet på en fil som ska sparas. Du skapar och visar en dialogrutan Spara som genom att initiera en OPENFILENAME- struktur och skicka strukturen till funktionen GetSaveFileName.
Dialogrutor i Explorer-stil Öppna och Spara som innehåller användargränssnittsfunktioner som liknar Utforskaren. Systemet fortsätter dock att ha stöd för dialogrutorna Öppna och Spara som för program som måste vara konsekventa med det gamla användargränssnittet.
Förutom skillnaden i utseende skiljer sig dialogrutorna i Explorer-stil och gammal stil åt i deras användning av anpassade mallar och krokprocedurer för att anpassa dialogrutorna. Dialogrutorna Explorer-stil och gammal stil har dock samma beteende för de flesta grundläggande åtgärder, till exempel att ange ett filnamnsfilter, validera användarens indata och hämta filnamnet som angetts av användaren. Mer information om dialogrutorna i Explorer-stil och gammal stil finns i Öppna och Spara som-dialogrutan Anpassning.
Följande bild visar en typisk dialogruta i Explorer-stil Öppna.
Följande bild visar en typisk dialogruta i Explorer-stil Spara som.
Om användaren anger ett filnamn och klickar på knappen OK returnerar GetOpenFileName eller GetSaveFileNameTRUE. Bufferten som lpstrFile medlem i OPENFILENAME- struktur innehåller den fullständiga sökvägen och filnamnet som anges av användaren.
Om användaren avbryter dialogrutan Öppna eller Spara som eller om ett fel inträffar returnerar funktionen FALSE. För att fastställa orsaken till felet anropar du funktionen CommDlgExtendedError för att hämta det utökade felvärdet. Om lpstrFile- buffert är för liten för att ta emot det fullständiga namnet returnerar CommDlgExtendedErrorFNERR_BUFFERTOOSMALL och de första 2 byteen av bufferten som pekas på av lpstrFile medlem anges till ett heltalsvärde som anger den storlek som krävs för att ta emot det fullständiga namnet.
Följande avsnitt beskrivs i det här avsnittet.
- filnamn och kataloger
- filter
- för fil- och katalogverifiering
- Dialogrutan Öppna och Spara som
- Explorer-Style Hook Procedurer
- Explorer-Style anpassade mallar
- Explorer-Style Kontrollidentifierare
- Anpassa Old-Style dialogrutor
Filnamn och kataloger
Informationen i det här avsnittet gäller både dialogrutor i Explorer-format och gammal stil Öppna och Spara som.
Innan du anropar funktionerna GetOpenFileName eller GetSaveFileName måste lpstrFile medlem i OPENFILENAME--strukturen peka på bufferten för att ta emot filnamnet. nMaxFile medlem måste ange storleken i tecken på bufferten lpstrFile. För en ANSI-funktion är det här antalet byte, men för en Unicode-funktion är detta antalet tecken.
Om användaren anger ett filnamn och klickar på knappen OK kopieras den valda enheten, katalogen och filnamnet i dialogrutan till lpstrFile buffert. Funktionen anger också nFileOffset och nFileExtension medlemmar till förskjutningarna, i tecken, från början av bufferten till filnamnet respektive filnamnstillägget.
Om du bara vill hämta filnamnet och filnamnstillägget anger du lpstrFileTitle medlem så att den pekar på en buffert och anger nMaxFileTitle medlem till buffertens storlek i tecken. Du kan också skicka lpstrFile- buffert i ett anrop till funktionen GetFileTitle för att hämta visningsnamnet för den valda filen. Observera dock att filnamnet som GetFileTitle- returnerar endast innehåller ett tillägg om det är användarens inställning för att visa filnamn.
I dialogrutan används den aktuella katalogen för anropsprocessen som den första katalogen som filer och kataloger ska visas från. Använd funktionerna GetCurrentDirectory och SetCurrentDirectory för att hämta och ändra den aktuella katalogen för en process. Om du vill ange en annan initial katalog utan att ändra den aktuella katalogen använder du lpstrInitialDir medlem för att ange namnet på en katalog. Dialogrutan ändrar automatiskt den aktuella katalogen när användaren väljer en annan enhet eller katalog. Om du vill förhindra att dialogrutan ändrar den aktuella katalogen anger du flaggan OFN_NOCHANGEDIR. Den här flaggan hindrar inte användaren från att ändra kataloger för att hitta en fil.
Om du vill ange ett standardfilnamnstillägg använder du lpstrDefExt medlem. Om användaren anger ett filnamn som inte har något tillägg lägger dialogrutan till standardtillägget. Om du anger ett standardtillägg och användaren anger ett filnamn med ett annat tillägg, anger dialogrutan flaggan OFN_EXTENSIONDIFFERENT.
Om du vill låta användaren välja fler än en fil från en katalog anger du flaggan OFN_ALLOWMULTISELECT. För kompatibilitet med äldre program använder standarddialogrutan för flera val det gamla användargränssnittet. Om du vill visa en dialogruta med flera val i Explorer-format måste du också ange flaggan OFN_EXPLORER.
Om användaren väljer fler än en fil returnerar bufferten som pekas på av lpstrFile medlem sökvägen till den aktuella katalogen följt av filnamnen för de valda filerna. nFileOffset medlem är förskjutningen till det första filnamnet och nFileExtension medlem används inte. I följande tabell beskrivs skillnaden mellan dialogrutor i Explorer-stil och gammal stil när du returnerar flera filnamn.
Dialogruteformat | Beskrivning |
---|---|
Dialogrutor i Explorer-format | Katalog- och filnamnssträngarna är NULL- avgränsade, med ett extra NULL- tecken efter det sista filnamnet. Med det här formatet kan dialogrutorna i Explorer-stil returnera långa filnamn som innehåller blanksteg. |
Dialogrutor i gammal stil | Katalog- och filnamnssträngarna avgränsas med blanksteg. För filnamn med blanksteg använder funktionen korta filnamn. |
Du kan använda funktionen FindFirstFile för att konvertera mellan långa och korta filnamn.
Om du anger OFN_ALLOWMULTISELECT och användaren bara väljer en fil har lpstrFile sträng inte någon avgränsare mellan sökvägen och filnamnet.
Filter
Informationen i det här avsnittet gäller både explorer-format och gammalt format dialogrutorna Öppna och Spara som.
Du kan ange filnamnsfilter som hjälper användaren att begränsa filnamnen som visas i dialogrutan. Ett filnamnsfilter består av ett par null-avslutade strängar, en beskrivning och ett mönster, det ena sammanfogat till det andra. Dialogrutan visar beskrivningen så att användaren kan välja vilket filter som ska användas. och det använder mönstret för att välja de filer som ska visas.
Om du vill ange filtren anger du lpstrFilter medlem i OPENFILENAME- struktur så att den pekar på en buffert som innehåller en matris med filtersträngpar. Den sista strängen i matrisen måste följas av ett extra null-tecken.
En mönstersträng kan vara en kombination av giltiga filnamnstecken och asterisken (*). Asterisken är ett jokertecken som representerar alla kombinationer av giltiga filnamnstecken. Dialogrutan visar endast de filer som matchar mönstret. Om du vill ange flera mönster för samma beskrivning måste du använda ett semikolon (;) för att avgränsa mönstren. Observera att blankstegstecken i mönstersträngen kan ge oväntade resultat.
Följande kodfragment anger två filter. Filtret med beskrivningen "Källa" har två mönster. Om användaren väljer det här filtret visar dialogrutan endast filer som har . C och . CXX-tillägg. Observera att i programmeringsspråket C är en sträng som omges av dubbla citattecken null-terminated.
OPENFILENAME ofn; // common dialog box structure
ofn.lpstrFilter = "Source\0*.C;*.CXX\0All\0*.*\0"
ofn.nFilterIndex = 1;
nFilterIndex medlem i OPENFILENAME- struktur anger ett index som anger vilket filter dialogrutan använder från början. Det första filtret i bufferten har index 1, det andra 2 och så vidare. Om användaren ändrar filtret när du använder dialogrutan anges nFilterIndex medlem till indexet för det valda filtret vid retur.
Du kan skapa ett anpassat filter genom att ange lpstrCustomFilter medlem till adressen för en buffert som innehåller ett enda filter, och genom att ange nMaxCustFilter medlem till buffertens storlek, i tecken eller byte. Dialogrutan placerar alltid det anpassade filtret i början av listan med filter och uppdaterar alltid mönsterdelen i filtret med mönstret från det filter som användaren har valt.
För dialogrutor i Explorer-stil kan standardtillägget ändras om användaren väljer ett annat filter. Om användaren väljer ett filter vars första mönster är av formuläret *.xxx (d.v.s. tillägget innehåller inte ett jokertecken) använder dialogrutan xxx som standardtillägg. Detta inträffar bara om du har angett ett standardtillägg i lpstrDefExt medlem i OPENFILENAME- struktur. Om användaren till exempel väljer "Källa\0*. C;*. CXX\0-filter, standardtillägget ändras till "C". Men om du hade definierat filtret som "Källa\0*. C*\0" ändras inte standardtillägget eftersom tillägget innehåller ett jokertecken.
Meddelandet CDN_INCLUDEITEM innehåller ett annat sätt att filtrera namnen som visas i dialogrutan. Om du vill använda det här meddelandet anger du en OFNHookProc hook-procedur och anger flaggan OFN_ENABLEINCLUDENOTIFY i OPENFILENAME- struktur när du skapar dialogrutan. Varje gång användaren öppnar en mapp skickar dialogrutan ett CDN_INCLUDEITEM meddelande till hook-proceduren för varje objekt i den nyligen öppnade mappen. Returvärdet för krokproceduren anger om dialogrutan ska visa objektet i mappens objektlista.
Fil- och katalogverifiering
Förutom vad som anges gäller informationen i det här avsnittet för dialogrutor i både Explorer-stil och Öppna och Spara som.
Dialogrutan validerar automatiskt filnamn som angetts av användaren för att säkerställa att namnen endast innehåller giltiga tecken. Om du vill åsidosätta filnamnsteckenverifieringen anger du flaggan OFN_NOVALIDATE.
Om du vill tvinga dialogrutan att kontrollera att användaren har angett namnet på en befintlig fil anger du flaggan OFN_FILEMUSTEXIST. Om du vill framtvinga verifiering av att den angivna sökvägen finns anger du flaggan OFN_PATHMUSTEXIST. Om du anger flaggan OFN_CREATEPROMPT uppmanas användaren att skapa en obefintlig fil i dialogrutan. Om den här flaggan har angetts och användaren väljer att skapa en ny fil stängs dialogrutan och funktionen returnerar det angivna namnet. Annars förblir dialogrutan öppen.
När du använder dialogrutan Spara som kan du dirigera dialogrutan för att be användaren om behörighet att skriva över en befintlig fil genom att ange flaggan OFN_OVERWRITEPROMPT.
Som standard skapar dialogrutan en testfil med noll längd för att avgöra om en ny fil kan skapas i den valda katalogen. Om du vill förhindra att den här testfilen skapas anger du flaggan OFN_NOTESTFILECREATE.
Om du aktiverar en hook-procedur meddelar dialogrutan din hook-procedur när en nätverksdelningsöverträdelse inträffar för det filnamn som användaren har angett. Om du anger flaggan OFN_EXPLORER skickar dialogrutan meddelandet CDN_SHAREVIOLATION till hook-proceduren. Om du inte anger OFN_EXPLORERskickar dialogrutan SHAREVISTRING- registrerat meddelande till krokproceduren. Om du vill förhindra att dialogrutan skickar meddelanden om delningsöverträdelser anger du flaggan OFN_SHAREAWARE.
Om användaren markerar kryssrutan skrivskyddad anger dialogrutan flaggan OFN_READONLY vid retur. Om du vill dölja kryssrutan Öppna som skrivskyddad anger du flaggan OFN_HIDEREADONLY. Om du vill förhindra att dialogrutan returnerar namn på befintliga filer som har det skrivskyddade attributet anger du flaggan OFN_NOREADONLYRETURN.
Om du vill förhindra att dialogrutan avrefererar länkfiler anger du värdet OFN_NODEREFERENCELINKS. I det här fallet returnerar dialogrutan namnet på länkfilen i stället för namnet på filen som refereras till av länkfilen.
Anpassning av dialogrutan Öppna och Spara som
Du kan anpassa dialogrutan Öppna eller Spara som genom att ange en krokprocedur, en anpassad mall eller båda. Versioner av dialogrutorna i Explorer-stil och gammal stil skiljer sig dock åt i användningen av anpassade mallar och krokprocedurer.
Information om hur du anpassar en dialogruta i Explorer-stil finns i Explorer-Style Hook Procedures, Explorer-Style Custom Templatesoch Explorer-Style Control Identifiers. Information om hur du anpassar en dialogruta i gammal stil finns i Anpassa Old-Style dialogrutor.
I följande tabell sammanfattas skillnaderna mellan de två formaten.
Kundanpassning | Beskrivning |
---|---|
Hook-procedur i Explorer-stil | Hook-proceduren tar emot meddelanden som skickas från den gemensamma dialogrutan och meddelanden för eventuella ytterligare kontroller som du har definierat genom att ange en underordnad dialogmall. Hook-proceduren tar inte emot meddelanden för standardkontrollerna i standarddialogrutan. |
Anpassad mall i Explorer-format | Systemet använder den anpassade mallen för att skapa en underordnad dialogruta. Mallen kan definiera ytterligare kontroller och kan ange platsen för klustret med standardkontroller. Den anpassade mallen ersätter inte standardmallen. |
Old-style Hook-procedur | Hook-proceduren tar emot alla meddelanden som skickas till dialogrutan, inklusive meddelanden för standardkontrollerna och eventuella anpassade kontroller. Hook-proceduren tar också emot registrerade meddelanden som skickas från den gemensamma dialogrutan. |
Anpassad mall i gammal stil | Den anpassade mallen ersätter standardmallen. Skapa den anpassade mallen genom att ändra standardmallen som anges i filen Fileopen.dlg. |
Standardrubriken för dialogrutor i både Explorer-stil och gammal stil är antingen "Öppna" eller "Spara som." Om du vill ändra rubriken anger du den nya rubriken i lpstrTitle medlem i OPENFILENAME- struktur.
En användares HKEY_CURRENT_USER registerdatafil kan innehålla värden som anpassar innehållet i dialogrutorna Öppna och Spara som. Dessa registerposter påverkar endast de dialogrutor som visas för den användare som är associerad med registreringsdatafilen.
Om du vill dölja funktioner i utforskarformat Öppna och dialogrutorna Spara som kan en administratör ange värdena i följande tabell under den här undernyckeln:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Comdlg32
Värdenamn | Värde | Betydelse |
---|---|---|
NoPlacesBar | 1 | Döljer platsfältet. |
NoFileMRU | 1 | Döljer listan senast använda (MRU). |
NoBackButton | 1 | Döljer knappen Bakåt. |
Innehållet i fältet Platser bestäms av innehållet i följande undernyckel:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Comdlg32
Placesbar
För närvarande kan det bara finnas fem poster under den här nyckeln och värdet/namnindexet är nollbaserat. Namnen på posterna ska vara Place0, Place1, Place2, Place3 och Place4. Värdena för posterna kan vara REG_DWORD, REG_SZeller REG_EXPAND_SZ värden som identifierar platser som ska inkluderas i platsfältet.
Värdetyp | Betydelse |
---|---|
REG_DWORD | Ett CSIDL-värde som identifierar en mapp. En lista över CSIDL-värden finns i CSIDL-värden. |
REG_SZ eller REG_EXPAND_SZ | En null-avslutad sträng som anger en giltig sökväg. |
Explorer-Style Hook Procedurer
Du kan anpassa en explorer-stil dialogrutan Öppna eller Spara som genom att ange en krokprocedur, en anpassad mall eller båda. Om du anger en krokprocedur för en dialogruta i Explorer-stil skapar systemet en dialogruta som är underordnad standarddialogrutan. Hook-proceduren fungerar som dialogrute för den underordnade dialogrutan. Den här underordnade dialogrutan baseras på den anpassade mallen eller på en standardmall om ingen anges. Mer information finns i Explorer-Style anpassade mallar.
Om du vill aktivera en hook-procedur för en Explorer-stil öppna eller dialogrutan Spara som använder du OPENFILENAME- struktur när du skapar dialogrutan. Ange OFN_ENABLEHOOK- och OFN_EXPLORER-flaggorna i medlemmen Flags och ange adressen för en OFNHookProc hook-procedur i lpfnHook medlem. Om du anger en hook-procedur och utelämnar OFN_EXPLORER-flaggan måste du använda en OFNHookProcOldStyle hook-procedur och du får det gamla användargränssnittet. Mer information finns i Anpassa Old-Style dialogrutor.
En hook-procedur i Explorer-stil tar emot en mängd olika meddelanden medan dialogrutan är öppen. Dessa inkluderar följande:
- Meddelandet WM_INITDIALOG och andra standarddialogrutor, till exempel WM_CTLCOLORDLG kontrollera färgmeddelandet.
- En uppsättning WM_NOTIFY meddelanden som anger åtgärder som vidtas av användaren eller andra dialogrutehändelser.
- Meddelanden för eventuella ytterligare kontroller som du har definierat genom att ange en underordnad dialogmall.
Dessutom finns det en uppsättning meddelanden som du kan skicka till en dialogruta i Explorer-stil för att hämta information eller för att kontrollera hur dialogrutan fungerar och ser ut.
Om du anger en krokprocedur för en dialogruta i Explorer-stil skapar standarddialogrutan en underordnad dialogruta när standarddialogrutan bearbetar sitt WM_INITDIALOG meddelande. Hook-proceduren fungerar som dialogrute för den underordnade dialogrutan. För närvarande tar hook-proceduren emot ett eget WM_INITDIALOG meddelande med parametern lParam inställd på adressen för OPENFILENAME- struktur som används för att initiera dialogrutan. När den underordnade dialogrutan har bearbetat sitt eget WM_INITDIALOG meddelande flyttas standarddialogrutan om det behövs standardkontrollerna för att göra plats för eventuella ytterligare kontroller i den underordnade dialogrutan. Standarddialogrutan skickar sedan meddelandet CDN_INITDONE meddelande till krokproceduren.
Hook-proceduren tar emot WM_NOTIFY meddelanden som anger åtgärder som användaren vidtar i dialogrutan. Du kan använda vissa av dessa meddelanden för att styra beteendet i dialogrutan. Hook-proceduren tar till exempel emot CDN_FILEOK-meddelandet när användaren väljer ett filnamn och klickar på knappen OK. Som svar på det här meddelandet kan hook-proceduren använda funktionen SetWindowLong för att avvisa det valda namnet och tvinga dialogrutan att förbli öppen.
Parametern lParam för varje WM_NOTIFY meddelande är en pekare till en OFNOTIFY eller OFNOTIFYEX struktur som definierar åtgärden. Den koden medlem i rubriken för den här strukturen innehåller något av följande meddelanden.
Meddelande | Betydelse |
---|---|
CDN_FILEOK | Användaren klickade på knappen OK. dialogrutan håller på att stängas. |
CDN_FOLDERCHANGE | Användaren öppnade en ny mapp eller katalog. |
CDN_HELP | Användaren klickade på knappen Hjälp. |
CDN_INCLUDEITEM | Avgör om ett objekt ska visas. När användaren öppnar en ny mapp eller katalog skickar systemet det här meddelandet för varje objekt i mappen eller katalogen. Systemet skickar endast det här meddelandet om flaggan OFN_ENABLEINCLUDENOTIFY har angetts. |
CDN_INITDONE | Systemet har initierat dialogrutan och dialogrutan har bearbetat WM_INITDIALOG meddelandet. Systemet har också ordnat kontroller i den gemensamma dialogrutan för att göra plats för kontrollerna i den underordnade dialogrutan (om någon). |
CDN_SELCHANGE | Användaren valde en ny fil eller mapp från fillistan. |
CDN_SHAREVIOLATION | Den vanliga dialogrutan påträffade ett delningsfel i filen som skulle returneras. |
CDN_TYPECHANGE | Användaren valde en ny filtyp i listan över filtyper. |
Dessa WM_NOTIFY meddelanden ersätter FILEOKSTRING, LBSELCHSTRING, SHAREVISTRINGoch HELPMSGSTRING registrerade meddelanden som används av tidigare versioner av Öppna och Spara som dialogrutor. Hook-proceduren tar dock även emot det ersatta meddelandet efter det WM_NOTIFY meddelandet om WM_NOTIFY-bearbetningen inte använder SetWindowLong för att ange ett icke-zero-DWL_MSGRESULT värde.
Om du vill hämta information om dialogrutans status eller för att styra dialogrutans beteende och utseende kan hook-proceduren skicka följande meddelanden till dialogrutan.
Meddelande | Betydelse |
---|---|
CDM_GETFILEPATH | Hämtar sökvägen och filnamnet för den valda filen. |
CDM_GETFOLDERIDLIST | Hämtar listan med objektidentifierare som motsvarar den aktuella mappen som dialogrutan har öppen. Mer information om objektidentifierarlistor finns i Introduktion till shell-namnområdet. |
CDM_GETFOLDERPATH | Hämtar sökvägen till den aktuella mappen eller katalogen för dialogrutan. |
CDM_GETSPEC | Hämtar filnamnet (inklusive sökvägen) för den fil som för närvarande är markerad i dialogrutan. |
CDM_HIDECONTROL | Döljer den angivna kontrollen. |
CDM_SETCONTROLTEXT | Anger texten i den angivna kontrollen. |
CDM_SETDEFEXT | Anger standardfilnamnstillägget för dialogrutan. |
Explorer-Style anpassade mallar
Om du vill definiera ytterligare kontroller för en öppna eller dialogrutan Spara som använder du OPENFILENAME- struktur för att ange en mall för en underordnad dialogruta som innehåller ytterligare kontroller. Om den underordnade dialogmallen är en resurs i ett program- eller dynamiskt länkbibliotek anger du flaggan OFN_ENABLETEMPLATE i Flags-medlemmen och använder hInstance- och lpTemplateName medlemmar i strukturen för att identifiera modulen och resursnamnet. Om mallen redan finns i minnet anger du flaggan OFN_ENABLETEMPLATEHANDLE och använder hInstance- medlem för att identifiera minnesobjektet som innehåller mallen. När du anger en underordnad dialogruta för en dialogruta i Explorer-stil måste du också ange flaggan OFN_EXPLORER. Annars förutsätter systemet att du tillhandahåller en ersättningsmall för en dialogruta i gammal stil. Om du tillhandahåller ytterligare kontroller måste du vanligtvis också ange en explorer-stil för att bearbeta meddelanden för de nya kontrollerna.
Du kan skapa en underordnad dialogruta som du gör med andra mallar, förutom att du måste ange formatmallarna WS_CHILD och WS_CLIPSIBLINGS och ange DS_3DLOOK och DS_CONTROL formatmallar. Systemet kräver formatmallen WS_CHILD eftersom mallen definierar en underordnad dialogruta för standarddialogrutan Öppna eller Dialogrutan Spara som. Formatet WS_CLIPSIBLINGS ser till att den underordnade dialogrutan inte målas över någon av kontrollerna i standarddialogrutan. Formatet DS_3DLOOK ser till att kontrollernas utseende i den underordnade dialogrutan överensstämmer med kontrollerna i standarddialogrutan. Formatet DS_CONTROL ser till att användaren kan använda TAB och andra navigeringsnycklar för att flytta mellan alla kontroller, standard eller anpassade, i den anpassade dialogrutan.
För att göra plats för de nya kontrollerna expanderar systemet standarddialogrutan med bredden och höjden på den anpassade dialogrutan. Som standard placeras alla kontroller från den anpassade dialogrutan under kontrollerna i standarddialogrutan. Du kan dock åsidosätta den här standardpositioneringen genom att inkludera en statisk textkontroll i din anpassade dialogrutemall och tilldela den kontrollidentifierarvärdet för stc32. (Det här värdet definieras i Dlgs.h-huvudfilen.) I det här fallet använder systemet kontrollen som referenspunkt för att avgöra var de nya kontrollerna ska placeras. Alla nya kontroller ovan och till vänster om stc32 kontrollen placeras samma mängd ovanför och till vänster om kontrollerna i standarddialogrutan. Nya kontroller nedan och till höger om stc32-kontrollen placeras nedan och till höger om standardkontrollerna. I allmänhet placeras varje ny kontroll så att den har samma position i förhållande till standardkontrollerna som den hade till stc32 kontroll. För att göra plats för dessa nya kontroller lägger systemet till utrymme till vänster, höger, nederkant och överst i standarddialogrutan efter behov.
Systemet kräver krokproceduren för att bearbeta alla meddelanden som är avsedda för den anpassade dialogrutan och skickar därför samma fönstermeddelanden till krokproceduren som till alla andra dialogruteprocedurer. Hook-proceduren tar till exempel emot WM_COMMAND meddelanden när användaren klickar på knappkontroller i den anpassade dialogrutan. Hook-proceduren ansvarar för att initiera dessa kontroller och hämta värden från kontrollerna när dialogrutan stängs. Observera att när hook-proceduren tar emot WM_INITDIALOG meddelande har systemet ännu inte flyttat kontrollerna till sina slutliga positioner.
Standarddialogrutan hanterar meddelanden för alla kontroller i standarddialogrutan, men hook-proceduren tar emot meddelanden för användaråtgärder på dessa kontroller enligt beskrivningen i Explorer-Style Hook Procedures.
Explorer-Style kontrollidentifierare
Windows Software Development Kit (SDK) innehåller standarddialogrutamallen för de gamla dialogrutorna, men innehåller inte standardmallen för dialogrutorna i Explorer-stil. Det beror på att dialogrutorna i Explorer-stil gör att du kan lägga till egna kontroller, men inte har stöd för att ändra mallen för standardkontrollerna. I vissa fall kan du dock behöva känna till de kontrollidentifierare som används i standardmallarna. Till exempel kräver CDM_HIDECONTROL- och CDM_SETCONTROLTEXT-meddelanden en kontrollidentifierare.
I följande tabell visas identifierarna för standardkontrollerna i dialogrutorna Öppna och Spara som. Identifierarna är konstanter som definieras i Dlgs.h och Winuser.h.
Kontrollidentifierare | Kontrollbeskrivning |
---|---|
chx1 | Kryssrutan skrivskyddad |
cmb1 | Listrutekombinationsruta som visar listan över filtypsfilter |
stc2 | Etikett för kombinationsrutan cmb1 |
cmb2 | Listrutekombinationsruta som visar den aktuella enheten eller mappen och som gör att användaren kan välja en enhet eller mapp att öppna |
stc4 | Etikett för kombinationsrutan cmb2 |
cmb13 | I listrutan som visar namnet på den aktuella filen kan användaren skriva namnet på en fil som ska öppnas och välja en fil som har öppnats eller sparats nyligen. Detta gäller för tidigare Explorer-kompatibla program utan krok eller dialogmall. Jämför med edt1. |
edt1 | Redigera kontroll som visar namnet på den aktuella filen eller låter användaren skriva namnet på filen som ska öppnas. Jämför med cmb13. |
stc3 | Etikett för kombinationsrutan cmb13 och redigeringskontrollen edt1 |
lst1 | Listruta som visar innehållet i den aktuella enheten eller mappen |
stc1 | Etikett för listrutan lst1 |
IDOK | Kommandoknappen OK (push-knapp) |
IDCANCEL- | Kommandoknappen Avbryt (push-knapp) |
pshHelp | Kommandoknappen Hjälp (push-knapp) |
Anpassa Old-Style dialogrutor
Du kan anpassa en dialogrutan Öppna eller Spara som genom att ange en OFNHookProcOldStyle hook-procedur som tar emot meddelanden eller meddelanden som är avsedda för standarddialogruteproceduren. Du kan också ange en anpassad mall som ska användas i stället för standardmallen. Krokprocedurerna och mallarna som används med dialogrutor i gammal stil liknar dem som används med de andra vanliga dialogrutorna. Mer information finns i Hook Procedurer för vanliga dialogrutor och anpassade mallar.
Om du vill aktivera en hook-procedur för en gammaldags dialogrutan Öppna eller Spara som använder du OPENFILENAME- struktur när du skapar dialogrutan. Ange flaggan OFN_ENABLEHOOK i medlemmen Flags och ange adressen för en OFNHookProcOldStyle hook-procedur i lpfnHook medlem. Dialogruteproceduren skickar ett WM_INITDIALOG meddelande till krokproceduren med parametern Param inställd på adressen för OPENFILENAME- struktur som används för att initiera dialogrutan.
Du kan använda OPENFILENAME- för att ange en anpassad mall för dialogrutan Öppna eller Spara som som ska användas i stället för standardmallen. Om din anpassade mall är en resurs i ett program- eller dynamiskt länkbibliotek anger du flaggan OFN_ENABLETEMPLATE i Flags-medlemmen och använder hInstance- och lpTemplateName medlemmar i strukturen för att identifiera modulen och resursnamnet. Om den anpassade mallen redan finns i minnet anger du flaggan OFN_ENABLETEMPLATEHANDLE och använder hInstance- medlem för att identifiera minnesobjektet som innehåller mallen. Skapa den anpassade mallen genom att ändra standardmallen som anges i filen Fileopen.dlg. De kontrollidentifierare som används i standarddialogmallarna Sök och Ersätt definieras i filen Dlgs.h.
Som standard visar funktionerna GetOpenFileName och GetSaveFileName dialogrutorna i Explorer-stil. Om du vill visa en dialogruta i gammal stil måste du ange en OFNHookProcOldStyle hook-procedur och se till att flaggan OFN_EXPLORER inte anges i Flags medlem i OPENFILENAME- struktur.
Om du anger flaggan OFN_EXPLORER behandlar systemet en hook-procedur eller anpassad mall som en anpassning i Explorer-stil. Information om hur du anpassar en dialogruta i Explorer-stil finns i Explorer-Style anpassade mallar.