Dialoogvensters Openen en Opslaan als
Notitie
De functie GetOpenFileName wordt gedemonstreerd in het Bestand in gebruik isvoorbeeld.
[Vanaf Windows Vista zijn de openen en Opslaan als algemene dialoogvensters vervangen door het dialoogvenster Algemeen item. We raden u aan de dialoogvenster-API voor algemene items te gebruiken in plaats van deze dialoogvensters uit de algemene dialoogvensterbibliotheek.]
Met het dialoogvenster Openen kan de gebruiker het station, de map en de naam van een bestand of set bestanden opgeven dat moet worden geopend. U maakt en geeft een dialoogvenster openen weer door een OPENFILENAME- structuur te initialiseren en de structuur door te geven aan de functie GetOpenFileName.
Met het dialoogvenster Opslaan als kan de gebruiker het station, de map en de naam van een bestand opgeven dat moet worden opgeslagen. U maakt en geeft een dialoogvenster Opslaan als weer door een OPENFILENAME- structuur te initialiseren en de structuur door te geven aan de Functie GetSaveFileName.
Verkennerstijl openen en dialoogvensters Opslaan als bieden gebruikersinterfacefuncties die vergelijkbaar zijn met Windows Verkenner. Het systeem blijft echter ondersteuning bieden voor oude Openen en dialoogvensters Opslaan als voor toepassingen die consistent moeten zijn met de gebruikersinterface van de oude stijl.
Naast het verschil in uiterlijk verschillen de dialoogvensters in Verkenner en oude stijl in het gebruik van aangepaste sjablonen en hookprocedures voor het aanpassen van de dialoogvensters. De dialoogvensters Verkenner en oude stijl hebben echter hetzelfde gedrag voor de meeste basisbewerkingen, zoals het opgeven van een bestandsnaamfilter, het valideren van de invoer van de gebruiker en het ophalen van de bestandsnaam die door de gebruiker is opgegeven. Zie Dialoogvenster Openen en Opslaan alsvoor meer informatie over de dialoogvensters verkenner en oude stijl.
In de volgende afbeelding ziet u een typische verkennerstijl dialoogvenster openen.
In de volgende afbeelding ziet u een typische verkennerstijl dialoogvenster Opslaan als.
Als de gebruiker een bestandsnaam opgeeft en op de knop OK klikt, retourneert GetOpenFileName of GetSaveFileNameTRUE. De buffer die wordt verwezen door de lpstrFile lid van de OPENFILENAME structuur bevat het volledige pad en de bestandsnaam die door de gebruiker zijn opgegeven.
Als de gebruiker het dialoogvenster Openen of Opslaan als annuleert of als er een fout optreedt, retourneert de functie ONWAAR. Als u de oorzaak van de fout wilt bepalen, roept u de CommDlgExtendedError- functie aan om de uitgebreide foutwaarde op te halen. Als de lpstrFile buffer te klein is om de volledige naam te ontvangen, retourneert CommDlgExtendedError-FNERR_BUFFERTOOSMALL en de eerste 2 bytes van de buffer die door het lpstrFile lid wordt verwezen, ingesteld op een geheel getal dat de grootte aangeeft die nodig is om de volledige naam te ontvangen.
De volgende onderwerpen worden in deze sectie besproken.
- bestandsnamen en mappen
- filters
- bestands- en mapvalidatie
- dialoogvenster Aanpassen als openen en opslaan als
- Explorer-Style Hook Procedures
- Explorer-Style aangepaste sjablonen
- Explorer-Style besturings-id's
- Dialoogvensters Old-Style aanpassen
Bestandsnamen en mappen
De informatie in deze sectie is van toepassing op zowel verkenner- als oude dialoogvensters openen en Opslaan als.
Voordat u de functies GetOpenFileName of GetSaveFileName aanroept, moet het lpstrFile lid van de OPENFILENAME structuur verwijzen naar de buffer om de bestandsnaam te ontvangen. De nMaxFile lid moet de grootte, in tekens, van de lpstrFile buffer opgeven. Voor een ANSI-functie is dit het aantal bytes, maar voor een Unicode-functie is dit het aantal tekens.
Als de gebruiker een bestandsnaam opgeeft en op de knop OK klikt, kopieert het dialoogvenster het geselecteerde station, de map en de bestandsnaam naar de lpstrFile buffer. Met de functie wordt ook de nFileOffset- en nFileExtension leden ingesteld op de offsets, in tekens, van het begin van de buffer naar de bestandsnaam en de bestandsnaamextensie.
Als u alleen de bestandsnaam en extensie wilt ophalen, stelt u de lpstrFileTitle- lid in op een buffer en stelt u de nMaxFileTitle- lid in op de grootte, in tekens, van de buffer. U kunt ook de lpstrFile buffer doorgeven in een aanroep naar de functie GetFileTitle om de weergavenaam van het geselecteerde bestand op te halen. Houd er echter rekening mee dat de bestandsnaam die GetFileTitle retourneert, alleen een extensie bevat als dat de voorkeur van de gebruiker is voor het weergeven van bestandsnamen.
In het dialoogvenster wordt de huidige map gebruikt voor het aanroepende proces als de eerste map waaruit bestanden en mappen moeten worden weergegeven. Gebruik de functies GetCurrentDirectory en SetCurrentDirectory om de huidige map van een proces op te halen en te wijzigen. Als u een andere eerste map wilt opgeven zonder de huidige map te wijzigen, gebruikt u de lpstrInitialDir lid om de naam van een map op te geven. In het dialoogvenster wordt uw huidige map automatisch gewijzigd wanneer de gebruiker een ander station of een andere map selecteert. Als u wilt voorkomen dat het dialoogvenster de huidige map wijzigt, stelt u de vlag OFN_NOCHANGEDIR in. Met deze vlag voorkomt u niet dat de gebruiker mappen wijzigt om een bestand te vinden.
Als u een standaardbestandsextensie wilt opgeven, gebruikt u de lpstrDefExt lid. Als de gebruiker een bestandsnaam opgeeft die geen extensie heeft, wordt in het dialoogvenster de standaardextensie toegevoegd. Als u een standaardextensie opgeeft en de gebruiker een bestandsnaam met een andere extensie opgeeft, wordt in het dialoogvenster de vlag OFN_EXTENSIONDIFFERENT ingesteld.
Als u wilt dat de gebruiker meer dan één bestand in een map selecteert, stelt u de vlag OFN_ALLOWMULTISELECT in. Voor compatibiliteit met oudere toepassingen gebruikt het standaarddialoogvenster voor meerdere selecties de gebruikersinterface in oude stijl. Als u een dialoogvenster met meerdere selectiemogelijkheden in Explorer wilt weergeven, moet u ook de vlag OFN_EXPLORER instellen.
Als de gebruiker meer dan één bestand selecteert, retourneert de buffer die wordt verwezen door de lpstrFile lid het pad naar de huidige map, gevolgd door de bestandsnamen van de geselecteerde bestanden. De nFileOffset lid is de verschuiving naar de voornaam en de nFileExtension lid wordt niet gebruikt. In de volgende tabel wordt het verschil beschreven tussen de dialoogvensters Verkenner en oude stijl bij het retourneren van meerdere bestandsnamen.
Stijl van dialoogvenster | Beschrijving |
---|---|
Dialoogvensters in Verkenner | De tekenreeksen voor map- en bestandsnaam worden NULL- gescheiden, met een extra NULL- teken achter de achternaam. Met deze indeling kunnen de dialoogvensters in de Verkenner-stijl lange bestandsnamen retourneren die spaties bevatten. |
Dialoogvensters in oude stijl | De tekenreeksen voor map- en bestandsnaam worden gescheiden door spaties. Voor bestandsnamen met spaties gebruikt de functie korte bestandsnamen. |
U kunt de functie FindFirstFile gebruiken om te converteren tussen lange en korte bestandsnamen.
Als u OFN_ALLOWMULTISELECT opgeeft en de gebruiker slechts één bestand selecteert, heeft de lpstrFile tekenreeks geen scheidingsteken tussen het pad en de bestandsnaam.
Filters
De informatie in deze sectie is van toepassing op de dialoogvensters Verkenner en oude stijl Openen en Opslaan als.
U kunt bestandsnaamfilters opgeven om de gebruiker te helpen bij het beperken van de bestandsnamen die in het dialoogvenster worden weergegeven. Een bestandsnaamfilter bestaat uit een paar null-beëindigde tekenreeksen, een beschrijving en een patroon, één samengevoegd met de andere. In het dialoogvenster wordt de beschrijving weergegeven waarmee de gebruiker kan kiezen welk filter moet worden gebruikt; en het gebruikt het patroon om de bestanden te selecteren die moeten worden weergegeven.
Als u de filters wilt opgeven, stelt u het lpstrFilter in lid van de OPENFILENAME structuur in om te verwijzen naar een buffer die een matrix van filterreeksparen bevat. De laatste tekenreeks in de matrix moet worden gevolgd door een extra null-teken.
Een patroontekenreeks kan een combinatie zijn van geldige bestandsnaamtekens en het sterretje (*). Het sterretje is een jokerteken dat een combinatie van geldige bestandsnaamtekens vertegenwoordigt. In het dialoogvenster worden alleen de bestanden weergegeven die overeenkomen met het patroon. Als u meerdere patronen voor dezelfde beschrijving wilt opgeven, moet u een puntkomma (;) gebruiken om de patronen te scheiden. Houd er rekening mee dat spatietekens in de patroontekenreeks onverwachte resultaten kunnen opleveren.
Het volgende codefragment bevat twee filters. Het filter met de beschrijving Bron heeft twee patronen. Als de gebruiker dit filter selecteert, worden in het dialoogvenster alleen bestanden weergegeven met de . C en . CXX-extensies. Opmerking: in de programmeertaal C is een tekenreeks tussen dubbele aanhalingstekens null-beëindigd.
OPENFILENAME ofn; // common dialog box structure
ofn.lpstrFilter = "Source\0*.C;*.CXX\0All\0*.*\0"
ofn.nFilterIndex = 1;
De nFilterIndex lid van de OPENFILENAME structuur geeft een index aan die aangeeft welk filter het dialoogvenster in eerste instantie gebruikt. Het eerste filter in de buffer heeft index 1, de tweede 2, enzovoort. Als de gebruiker het filter wijzigt tijdens het gebruik van het dialoogvenster, wordt het nFilterIndex lid ingesteld op de index van het geselecteerde filter bij return.
U kunt een aangepast filter maken door het lpstrCustomFilter lid in te stellen op het adres van een buffer die één filter bevat en door de nMaxCustFilter in te stellen lid op de grootte van de buffer, in tekens of bytes. In het dialoogvenster wordt altijd het aangepaste filter aan het begin van de lijst met filters geplaatst en bij terugkeer wordt altijd het patroongedeelte van het filter bijgewerkt met het patroon van het filter dat door de gebruiker is geselecteerd.
Voor dialoogvensters in explorer-stijl kan de standaardextensie worden gewijzigd als de gebruiker een ander filter selecteert. Als de gebruiker een filter selecteert waarvan het eerste patroon van het formulier *is.xxx (dat wil gezegd, de extensie bevat geen jokerteken), gebruikt het dialoogvenster xxx als de standaardextensie. Dit gebeurt alleen als u een standaardextensie hebt opgegeven in de lpstrDefExt- lid van de OPENFILENAME structuur. Als de gebruiker bijvoorbeeld bron\0* selecteert. C;*. CXX\0-filter, de standaardextensie verandert in C. Als u het filter echter hebt gedefinieerd als 'Bron\0*.' C*\0", de standaardextensie wordt niet gewijzigd omdat de extensie een jokerteken bevat.
Het CDN_INCLUDEITEM meldingsbericht biedt een andere manier om de namen te filteren die in het dialoogvenster worden weergegeven. Als u dit bericht wilt gebruiken, geeft u een OFNHookProc hookprocedure op en geeft u de vlag OFN_ENABLEINCLUDENOTIFY op in de OPENFILENAME structuur wanneer u het dialoogvenster maakt. Telkens wanneer de gebruiker een map opent, wordt in het dialoogvenster een CDN_INCLUDEITEM melding naar de hookprocedure verzonden voor elk item in de zojuist geopende map. De retourwaarde van de hookprocedure geeft aan of het dialoogvenster het item in de itemlijst van de map moet weergeven.
Validatie van bestanden en mappen
Behalve zoals vermeld, is de informatie in deze sectie van toepassing op de dialoogvensters Verkenner en oude stijl Openen en Opslaan als.
Het dialoogvenster valideert automatisch bestandsnamen die door de gebruiker zijn getypt om ervoor te zorgen dat de namen alleen geldige tekens bevatten. Als u de validatie van bestandsnaamtekens wilt overschrijven, stelt u de vlag OFN_NOVALIDATE in.
Als u wilt afdwingen dat de gebruiker de naam van een bestaand bestand heeft opgegeven, stelt u de vlag OFN_FILEMUSTEXIST in. Als u wilt afdwingen dat het opgegeven pad bestaat, stelt u de vlag OFN_PATHMUSTEXIST in. Als u de vlag OFN_CREATEPROMPT instelt, wordt de gebruiker in het dialoogvenster gevraagd een niet-bestaand bestand te maken. Als deze vlag is ingesteld en de gebruiker ervoor kiest een nieuw bestand te maken, wordt het dialoogvenster gesloten en retourneert de functie de opgegeven naam. Anders blijft het dialoogvenster geopend.
Wanneer u het dialoogvenster Opslaan als gebruikt, kunt u het dialoogvenster om de gebruiker vragen een bestaand bestand te overschrijven door de vlag OFN_OVERWRITEPROMPT in te stellen.
Standaard wordt in het dialoogvenster een testbestand met lengte nul gemaakt om te bepalen of een nieuw bestand in de geselecteerde map kan worden gemaakt. Als u wilt voorkomen dat dit testbestand wordt gemaakt, stelt u de vlag OFN_NOTESTFILECREATE in.
Als u een hookprocedure inschakelt, meldt het dialoogvenster uw hookprocedure wanneer er een schending van het delen van netwerken plaatsvindt voor de bestandsnaam die door de gebruiker is opgegeven. Als u de vlag OFN_EXPLORER instelt, verzendt het dialoogvenster het CDN_SHAREVIOLATION bericht naar de hookprocedure. Als u OFN_EXPLORERniet instelt, verzendt het dialoogvenster de SHAREVISTRING geregistreerd bericht naar de hookprocedure. Als u wilt voorkomen dat het dialoogvenster meldingen verzendt voor schendingen van delen, stelt u de vlag OFN_SHAREAWARE in.
Als de gebruiker het selectievakje Alleen-lezen inschakelt, wordt in het dialoogvenster de vlag OFN_READONLY bij terugkeer ingesteld. Als u het selectievakje Openen als alleen-lezen wilt verbergen, stelt u de vlag OFN_HIDEREADONLY in. Als u wilt voorkomen dat in het dialoogvenster namen worden geretourneerd van bestaande bestanden met het kenmerk Alleen-lezen, stelt u de vlag OFN_NOREADONLYRETURN in.
Als u wilt voorkomen dat het dialoogvenster koppelingsbestanden uitstellen, stelt u de OFN_NODEREFERENCELINKS waarde in. In dit geval retourneert het dialoogvenster de naam van het koppelingsbestand in plaats van de naam van het bestand waarnaar wordt verwezen door het koppelingsbestand.
Aanpassing van dialoogvenster Openen en opslaan als
U kunt een dialoogvenster Openen of Opslaan als aanpassen door een haakprocedure, een aangepaste sjabloon of beide op te geven. De verkenner- en oude versies van de dialoogvensters verschillen echter in het gebruik van aangepaste sjablonen en hookprocedures.
Zie Explorer-Style Hook Procedures, Explorer-Style Aangepaste sjablonenen Explorer-Style Besturings-id'svoor meer informatie over het aanpassen van een dialoogvenster in Explorer. Zie Dialoogvensters aanpassen Old-Stylevoor meer informatie over het aanpassen van een dialoogvenster in oude stijl.
De volgende tabel bevat een overzicht van de verschillen tussen de twee stijlen.
Aanpassing | Beschrijving |
---|---|
Verkenner-stijl Haakprocedure | De hookprocedure ontvangt meldingsberichten die zijn verzonden vanuit het algemene dialoogvenster en berichten voor eventuele aanvullende besturingselementen die u hebt gedefinieerd door een sjabloon voor een onderliggend dialoogvenster op te geven. De hookprocedure ontvangt geen berichten voor de standaardbesturingselementen van het standaarddialoogvenster. |
Aangepaste sjabloon in Verkenner | Het systeem gebruikt de aangepaste sjabloon om een onderliggend dialoogvenster te maken. De sjabloon kan aanvullende besturingselementen definiëren en kan de locatie van het cluster van standaardbesturingselementen opgeven. De aangepaste sjabloon vervangt de standaardsjabloon niet. |
Oude haakprocedure | De hookprocedure ontvangt alle berichten die naar het dialoogvenster worden verzonden, inclusief berichten voor de standaardbesturingselementen en aangepaste besturingselementen. De hookprocedure ontvangt ook geregistreerde berichten die vanuit het algemene dialoogvenster worden verzonden. |
Aangepaste sjabloon in oude stijl | De aangepaste sjabloon vervangt de standaardsjabloon. Maak de aangepaste sjabloon door de standaardsjabloon te wijzigen die is opgegeven in het bestand Fileopen.dlg. |
De standaardtitel voor dialoogvensters in Verkenner en oude stijl is 'Openen' of 'Opslaan als'. Als u de titel wilt wijzigen, geeft u de nieuwe titel op in de lpstrTitle- lid van de OPENFILENAME structuur.
De HKEY_CURRENT_USER register hive van een gebruiker kan waarden bevatten die de inhoud van de verkennerstijl aanpassen openen en dialoogvensters Opslaan als. Deze registervermeldingen zijn alleen van invloed op de dialoogvensters die worden weergegeven voor de gebruiker die is gekoppeld aan de register hive.
Een beheerder kan de waarden in de volgende tabel onder deze subsleutel instellen om functies van de verkennerstijl te verbergen Openen en Opslaan als:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Comdlg32
Waardenaam | Waarde | Betekenis |
---|---|---|
NoPlacesBar- | 1 | Verbergt de plaatsbalk. |
NoFileMRU- | 1 | Hiermee verbergt u de lijst meest recent gebruikte (MRU). |
NoBackButton- | 1 | Hiermee verbergt u de knop Vorige. |
De inhoud van de plaatsen balk wordt bepaald door de inhoud van de volgende subsleutel:
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Comdlg32
Placesbar
Er kunnen momenteel slechts vijf vermeldingen onder deze sleutel zijn en de waarde-/naamindex is gebaseerd op nul. De namen voor de items moeten Place0, Place1, Place2, Place3 en Place4 zijn. De waarden van de vermeldingen kunnen worden REG_DWORD, REG_SZof REG_EXPAND_SZ waarden die locaties identificeren die moeten worden opgenomen in de locatiebalk.
Waardetype | Betekenis |
---|---|
REG_DWORD | Een CSIDL-waarde die een map identificeert. Zie CSIDL-waardenvoor een lijst met CSIDL-waarden. |
REG_SZ of REG_EXPAND_SZ | Een door null beëindigde tekenreeks die een geldig pad aangeeft. |
procedures voor Explorer-Style haak
U kunt een verkennerstijl aanpassen Openen of dialoogvenster Opslaan als door een haakprocedure, een aangepaste sjabloon of beide op te geven. Als u een hookprocedure opgeeft voor een dialoogvenster in explorerstijl, maakt het systeem een dialoogvenster dat een onderliggend element is van het standaarddialoogvenster. De haakprocedure fungeert als de dialoogvensterprocedure voor het onderliggende dialoogvenster. Dit onderliggende dialoogvenster is gebaseerd op de aangepaste sjabloon of op een standaardsjabloon als er geen sjabloon is opgegeven. Zie Explorer-Style Aangepaste sjablonenvoor meer informatie.
Als u een hookprocedure wilt inschakelen voor een Verkenner-stijl Het dialoogvenster openen of Opslaan als, gebruikt u de structuur openFILENAME structuur wanneer u het dialoogvenster maakt. Stel de OFN_ENABLEHOOK- en OFN_EXPLORER-vlaggen in het Flags lid in en geef het adres op van een OFNHookProc hookprocedure in de lpfnHook lid. Als u een haakprocedure opgeeft en de OFN_EXPLORER vlag weglaat, moet u een OFNHookProcOldStyle hookprocedure gebruiken en krijgt u de oude gebruikersinterface. Zie Het aanpassen van Old-Style dialoogvenstersvoor meer informatie.
Een hookprocedure in Explorer-stijl ontvangt verschillende berichten terwijl het dialoogvenster is geopend. Deze omvatten het volgende:
- Het WM_INITDIALOG bericht en andere standaarddialoogvensterberichten, zoals het WM_CTLCOLORDLG besturingselementkleurbericht.
- Een set WM_NOTIFY meldingsberichten waarmee acties worden aangegeven die door de gebruiker of andere dialoogvenster-gebeurtenissen zijn uitgevoerd.
- Berichten voor aanvullende besturingselementen die u hebt gedefinieerd door een onderliggende dialoogvenstersjabloon op te geven.
Daarnaast is er een set berichten die u kunt verzenden naar een dialoogvenster in explorerstijl om informatie op te halen of om het gedrag en het uiterlijk van het dialoogvenster te bepalen.
Als u een haakprocedure opgeeft voor een dialoogvenster in explorerstijl, wordt met de standaarddialoogvensterprocedure een onderliggend dialoogvenster gemaakt wanneer de standaarddialoogvensterprocedure het WM_INITDIALOG bericht verwerkt. De haakprocedure fungeert als de dialoogvensterprocedure voor het onderliggende dialoogvenster. Op dit moment ontvangt de hookprocedure een eigen WM_INITDIALOG bericht met de parameter lParam ingesteld op het adres van de OPENFILENAME structuur die wordt gebruikt om het dialoogvenster te initialiseren. Nadat het onderliggende dialoogvenster is voltooid met het verwerken van een eigen WM_INITDIALOG bericht, verplaatst de standaarddialoogvenster de standaardbesturingselementen, indien nodig, om ruimte te maken voor eventuele extra besturingselementen van het onderliggende dialoogvenster. Met de standaarddialoogvensterprocedure wordt vervolgens het CDN_INITDONE meldingsbericht naar de hookprocedure verzonden.
De hookprocedure ontvangt WM_NOTIFY meldingsberichten die aangeven welke acties door de gebruiker in het dialoogvenster zijn uitgevoerd. U kunt sommige van deze berichten gebruiken om het gedrag van het dialoogvenster te bepalen. De hookprocedure ontvangt bijvoorbeeld het CDN_FILEOK bericht wanneer de gebruiker een bestandsnaam kiest en op de knop OK klikt. Als reactie op dit bericht kan de hookprocedure de functie SetWindowLong gebruiken om de geselecteerde naam te weigeren en af te dwingen dat het dialoogvenster geopend blijft.
De parameter lParam voor elk WM_NOTIFY bericht is een aanwijzer naar een OFNOTIFY- of VANNOTIFYEX structuur waarmee de actie wordt gedefinieerd. De code lid in de koptekst van deze structuur bevat een van de volgende meldingsberichten.
Bericht | Betekenis |
---|---|
CDN_FILEOK | De gebruiker heeft op de knop OK geklikt; het dialoogvenster staat op het punt te sluiten. |
CDN_FOLDERCHANGE | De gebruiker heeft een nieuwe map of map geopend. |
CDN_HELP | De gebruiker heeft op de knop Help geklikt. |
CDN_INCLUDEITEM | Bepaalt of een item moet worden weergegeven. Wanneer de gebruiker een nieuwe map of map opent, verzendt het systeem deze melding voor elk item in de map of map. Het systeem verzendt deze melding alleen als de vlag OFN_ENABLEINCLUDENOTIFY is ingesteld. |
CDN_INITDONE | Het systeem is klaar met het initialiseren van het dialoogvenster en het dialoogvenster is klaar met het verwerken van het WM_INITDIALOG bericht. Bovendien is het systeem klaar met het rangschikken van besturingselementen in het algemene dialoogvenster om ruimte te maken voor de besturingselementen van het onderliggende dialoogvenster (indien van toepassing). |
CDN_SELCHANGE | De gebruiker heeft een nieuw bestand of nieuwe map geselecteerd in de lijst met bestanden. |
CDN_SHAREVIOLATION | In het algemene dialoogvenster is een schending van het delen opgetreden in het bestand dat binnenkort wordt geretourneerd. |
CDN_TYPECHANGE | De gebruiker heeft een nieuw bestandstype geselecteerd in de lijst met bestandstypen. |
Deze WM_NOTIFY berichten vervangen de FILEOKSTRING-, LBSELCHSTRING-, SHAREVISTRING-en HELPMSGSTRING geregistreerde berichten die worden gebruikt in eerdere versies van de openen en dialoogvensters Opslaan als. De haakprocedure ontvangt echter ook het vervangen bericht na het WM_NOTIFY bericht als de WM_NOTIFY verwerking geen gebruik maakt van SetWindowLong om een niet-nul-DWL_MSGRESULT-waarde in te stellen.
Om informatie over de status van het dialoogvenster op te halen of om het gedrag en het uiterlijk van het dialoogvenster te bepalen, kan de hookprocedure de volgende berichten naar het dialoogvenster verzenden.
Bericht | Betekenis |
---|---|
CDM_GETFILEPATH | Hiermee haalt u het pad en de bestandsnaam van het geselecteerde bestand op. |
CDM_GETFOLDERIDLIST | Hiermee wordt de lijst met item-id's opgehaald die overeenkomt met de huidige map die in het dialoogvenster is geopend. Zie Inleiding tot de Shell-naamruimtevoor meer informatie over item-id-lijsten. |
CDM_GETFOLDERPATH | Hiermee wordt het pad van de huidige map of map voor het dialoogvenster opgehaald. |
CDM_GETSPEC | Hiermee haalt u de bestandsnaam (niet het pad) van het bestand op dat momenteel is geselecteerd in het dialoogvenster. |
CDM_HIDECONTROL | Hiermee verbergt u het opgegeven besturingselement. |
CDM_SETCONTROLTEXT | Hiermee stelt u de tekst in het opgegeven besturingselement in. |
CDM_SETDEFEXT | Hiermee stelt u de standaardbestandsextensie voor het dialoogvenster in. |
aangepaste sjablonen Explorer-Style
Als u aanvullende besturingselementen wilt definiëren voor een Verkenner-stijl Openen of dialoogvenster Opslaan als, gebruikt u de structuur openFILENAME om een sjabloon op te geven voor een onderliggend dialoogvenster met de aanvullende besturingselementen. Als uw onderliggende dialoogvenstersjabloon een resource is in een toepassings- of dynamische koppelingsbibliotheek, stelt u de vlag OFN_ENABLETEMPLATE in het lid van de Vlaggen en gebruikt u de hInstance- en lpTemplateName leden van de structuur om de module en resourcenaam te identificeren. Als de sjabloon zich al in het geheugen bevindt, stelt u de vlag OFN_ENABLETEMPLATEHANDLE in en gebruikt u de hInstance- lid om het geheugenobject te identificeren dat de sjabloon bevat. Bij het instellen van een onderliggend dialoogvenster voor een dialoogvenster in explorerstijl moet u ook de vlag OFN_EXPLORER instellen; anders wordt ervan uitgegaan dat u een vervangende sjabloon voor een dialoogvenster in oude stijl opstelt. Als u aanvullende besturingselementen opgeeft, moet u doorgaans ook een hookprocedure in verkenner opgeven om berichten voor de nieuwe besturingselementen te verwerken.
U kunt de sjabloon voor het onderliggende dialoogvenster maken zoals u een andere sjabloon doet, behalve dat u de stijlen WS_CHILD en WS_CLIPSIBLINGS moet opgeven en de stijlen DS_3DLOOK en DS_CONTROL moet opgeven. Voor het systeem is de WS_CHILD stijl vereist, omdat uw sjabloon een onderliggend dialoogvenster definieert van de standaarddialoogvenster Openen of Opslaan als dialoogvenster. De stijl WS_CLIPSIBLINGS zorgt ervoor dat het onderliggende dialoogvenster niet over een van de besturingselementen in het standaarddialoogvenster wordt geschilderd. De stijl DS_3DLOOK zorgt ervoor dat het uiterlijk van de besturingselementen in het onderliggende dialoogvenster consistent is met de besturingselementen in het standaarddialoogvenster. De stijl DS_CONTROL zorgt ervoor dat de gebruiker tab en andere navigatietoetsen kan gebruiken om te schakelen tussen alle besturingselementen, standaard of aangepast, in het aangepaste dialoogvenster.
Als u ruimte wilt maken voor de nieuwe besturingselementen, wordt het standaarddialoogvenster uitgebreid met de breedte en hoogte van het aangepaste dialoogvenster. Standaard worden alle besturingselementen in het aangepaste dialoogvenster onder de besturingselementen in het standaarddialoogvenster geplaatst. U kunt deze standaardpositie echter overschrijven door een statisch tekst besturingselement op te slaan in uw aangepaste dialoogvenstersjabloon en deze toe te wijzen aan de waarde van de besturings-id van stc32. (Deze waarde is gedefinieerd in het headerbestand Dlgs.h.) In dit geval gebruikt het systeem het besturingselement als referentiepunt om te bepalen waar de nieuwe besturingselementen moeten worden positioneren. Alle nieuwe besturingselementen boven en links van het besturingselement stc32 worden boven en links van de besturingselementen in het standaarddialoogvenster geplaatst. Nieuwe besturingselementen hieronder en rechts van het stc32 besturingselement worden onder en rechts van de standaardbesturingselementen weergegeven. Over het algemeen wordt elk nieuw besturingselement zodanig ingesteld dat het dezelfde positie heeft ten opzichte van de standaardbesturingselementen als de stc32 besturingselement. Als u ruimte wilt maken voor deze nieuwe besturingselementen, voegt het systeem indien nodig ruimte toe aan de linkerkant, rechts, onder en boven aan het standaarddialoogvenster.
Het systeem vereist dat de hookprocedure alle berichten verwerkt die zijn bedoeld voor het aangepaste dialoogvenster en daarom dezelfde vensterberichten naar de hookprocedure verzendt als naar elke andere dialoogvensterprocedure. De hookprocedure ontvangt bijvoorbeeld WM_COMMAND berichten wanneer de gebruiker in het aangepaste dialoogvenster op knopbesturingselementen klikt. De hookprocedure is verantwoordelijk voor het initialiseren van deze besturingselementen en het ophalen van waarden uit de besturingselementen wanneer het dialoogvenster wordt gesloten. Houd er rekening mee dat wanneer de hookprocedure het WM_INITDIALOG bericht ontvangt, het systeem de besturingselementen nog niet heeft verplaatst naar de uiteindelijke posities.
De standaarddialoogvensterprocedure verwerkt berichten voor alle besturingselementen in het standaarddialoogvenster, maar de hookprocedure ontvangt de meldingsberichten voor gebruikersacties op deze besturingselementen, zoals beschreven in Explorer-Style Hook Procedures.
Explorer-Style Besturings-id's
De Windows Software Development Kit (SDK) biedt de standaarddialoogvenstersjabloon voor de dialoogvensters in de oude stijl, maar bevat niet de standaardsjabloon voor de dialoogvensters in verkennerstijl. Dit komt doordat u in het dialoogvenster Verkenner uw eigen besturingselementen kunt toevoegen, maar u de sjabloon niet kunt wijzigen voor de standaardbesturingselementen. In sommige gevallen moet u echter mogelijk weten welke besturings-id's worden gebruikt in de standaardsjablonen. Voor de CDM_HIDECONTROL- en CDM_SETCONTROLTEXT-berichten is bijvoorbeeld een besturings-id vereist.
In de volgende tabel ziet u de id's van de standaardbesturingselementen in de explorerstijl openen en dialoogvensters Opslaan als. De id's zijn constanten die zijn gedefinieerd in Dlgs.h en Winuser.h.
Besturingselement-id | Beschrijving van besturingselement |
---|---|
chx1- | Het selectievakje Alleen-lezen |
cmb1- | Vervolgkeuzelijst met invoervak waarin de lijst met bestandstypefilters wordt weergegeven |
stc2- | Label voor de cmb1 keuzelijst met invoervak |
cmb2- | Vervolgkeuzelijst met invoervak waarin het huidige station of de huidige map wordt weergegeven en waarmee de gebruiker een station of map kan selecteren om te openen |
stc4- | Label voor de cmb2 keuzelijst met invoervak |
cmb13- | Met de vervolgkeuzelijst met invoervak waarin de naam van het huidige bestand wordt weergegeven, kan de gebruiker de naam van een bestand typen om te openen en een bestand selecteren dat onlangs is geopend of opgeslagen. Dit is voor eerdere verkenner-compatibele toepassingen zonder hook- of dialoogvenstersjabloon. Vergelijk met edt1. |
edt1- | Besturingselement bewerken waarmee de naam van het huidige bestand wordt weergegeven of waarmee de gebruiker de naam van het bestand kan typen om te openen. Vergelijk met cmb13. |
stc3- | Label voor de cmb13 keuzelijst met invoervak en het besturingselement edt1 bewerken |
lst1- | Keuzelijst met de inhoud van het huidige station of de huidige map |
stc1- | Label voor de lst1 keuzelijst |
IDOK- | De opdrachtknop OK (drukknop) |
IDCANCEL- | De opdrachtknop Annuleren (drukknop) |
pshHelp- | De Help opdrachtknop (drukknop) |
Dialoogvensters Old-Style aanpassen
U kunt een oude stijl aanpassen Open of dialoogvenster Opslaan als door een OFNHookProcOldStyle hookprocedure op te geven die berichten of meldingen ontvangt die zijn bedoeld voor de standaarddialoogvensterprocedure. U kunt ook een aangepaste sjabloon opgeven voor gebruik in plaats van de standaardsjabloon. De haakprocedures en sjablonen die worden gebruikt met de dialoogvensters in de oude stijl zijn vergelijkbaar met de procedures en sjablonen die worden gebruikt in combinatie met de andere veelgebruikte dialoogvensters. Zie Hook Procedures voor algemene dialoogvensters en aangepaste sjablonenvoor meer informatie.
Als u een haakprocedure wilt inschakelen voor een oude stijl Het dialoogvenster openen of Opslaan als, gebruikt u de openFILENAME structuur wanneer u het dialoogvenster maakt. Stel de OFN_ENABLEHOOK vlag in het Flags lid in en geef het adres op van een OFNHookProcOldStyle hookprocedure in de lpfnHook lid. De dialoogvensterprocedure verzendt een WM_INITDIALOG bericht naar de hookprocedure met de parameter Param ingesteld op het adres van de OPENFILENAME structuur die wordt gebruikt om het dialoogvenster te initialiseren.
U kunt de OPENFILENAME structuur gebruiken om een aangepaste sjabloon op te geven voor het dialoogvenster Openen of Opslaan als in plaats van de standaardsjabloon. Als uw aangepaste sjabloon een resource is in een toepassings- of dynamische koppelingsbibliotheek, stelt u de vlag OFN_ENABLETEMPLATE in de flags lid in en gebruikt u de hInstance en lpTemplateName leden van de structuur om de module en resourcenaam te identificeren. Als uw aangepaste sjabloon zich al in het geheugen bevindt, stelt u de vlag OFN_ENABLETEMPLATEHANDLE in en gebruikt u de hInstance lid om het geheugenobject te identificeren dat de sjabloon bevat. Maak de aangepaste sjabloon door de standaardsjabloon te wijzigen die is opgegeven in het bestand Fileopen.dlg. De besturings-id's die worden gebruikt in de standaarddialoogvenstersjablonen zoeken en vervangen, worden gedefinieerd in het bestand Dlgs.h.
Standaard worden in de functies GetOpenFileName en GetSaveFileName de dialoogvensters verkenner weergegeven. Als u een dialoogvenster met een oude stijl wilt weergeven, moet u een OFNHookProcOldStyle haakprocedure opgeven en ervoor zorgen dat de OFN_EXPLORER vlag niet is ingesteld in de Flags lid van de OPENFILENAME structuur.
Als u de vlag OFN_EXPLORER instelt, behandelt het systeem een haakprocedure of aangepaste sjabloon als een aanpassing in verkennerstijl. Zie Explorer-Style Aangepaste sjablonenvoor meer informatie over het aanpassen van een dialoogvenster in Verkenner.