Boîtes de dialogue Ouvrir et enregistrer sous
Notes
La fonction GetOpenFileName est illustrée dans l’exemple File is in use.
[À compter de Windows Vista, les boîtes de dialogue Ouvrir et Enregistrer en tant que communes ont été remplacées par la boîte de dialogue Élément commun. Nous vous recommandons d’utiliser l’API Common Item Dialog au lieu de ces boîtes de dialogue à partir de la bibliothèque de boîtes de dialogue commune.]
La boîte de dialogue Ouvrir permet à l’utilisateur de spécifier le lecteur, le répertoire et le nom d’un fichier ou d’un ensemble de fichiers à ouvrir. Vous créez et affichez une boîte de dialogue Ouvrir en initialisant une structure OPENFILENAME et en transmettant la structure à la fonction GetOpenFileName .
La boîte de dialogue Enregistrer sous permet à l’utilisateur de spécifier le lecteur, le répertoire et le nom d’un fichier à enregistrer. Vous créez et affichez une boîte de dialogue Enregistrer sous en initialisant une structure OPENFILENAME et en transmettant la structure à la fonction GetSaveFileName .
les boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer fournissent des fonctionnalités d’interface utilisateur similaires à la Explorer Windows. Toutefois, le système continue de prendre en charge les anciennes boîtes de dialogue Ouvrir et Enregistrer sous pour les applications qui doivent être cohérentes avec l’ancienne interface utilisateur.
En plus de la différence d’apparence, les boîtes de dialogue Explorer et anciennes se distinguent par leur utilisation de modèles personnalisés et de procédures de crochet pour personnaliser les boîtes de dialogue. Toutefois, les boîtes de dialogue Explorer et ancien style ont le même comportement pour la plupart des opérations de base, telles que la spécification d’un filtre de nom de fichier, la validation de l’entrée de l’utilisateur et l’obtention du nom de fichier spécifié par l’utilisateur. Pour plus d’informations sur les boîtes de dialogue de style Explorer et ancien style, consultez Personnalisation de la boîte de dialogue Ouvrir et enregistrer sous.
L’illustration suivante montre une boîte de dialogue Ouvrir de style Explorer classique.
L’illustration suivante montre une boîte de dialogue Enregistrer sous de style Explorer classique.
Si l’utilisateur spécifie un nom de fichier et clique sur le bouton OK , GetOpenFileName ou GetSaveFileName retourne TRUE. La mémoire tampon pointée vers le membre lpstrFile de la structure OPENFILENAME contient le chemin d’accès complet et le nom de fichier spécifiés par l’utilisateur.
Si l’utilisateur annule la boîte de dialogue Ouvrir ou Enregistrer sous ou si une erreur se produit, la fonction retourne FALSE. Pour déterminer la cause de l’erreur, appelez la fonction CommDlgExtendedError pour récupérer la valeur d’erreur étendue. Si la mémoire tampon lpstrFile est trop petite pour recevoir le nom complet, CommDlgExtendedError retourne FNERR_BUFFERTOOSMALL et les 2 premiers octets de la mémoire tampon pointées par le membre lpstrFile sont définis sur une valeur entière spécifiant la taille requise pour recevoir le nom complet.
Les rubriques suivantes sont abordées dans cette section.
- Noms de fichiers et répertoires
- Filtres
- Validation de fichiers et de répertoires
- Personnalisation de la boîte de dialogue Ouvrir et enregistrer sous
- procédures de crochet de style Explorer
- modèles personnalisés de style Explorer
- Identificateurs de contrôle de style Explorer
- Personnalisation des boîtes de dialogue Old-Style
Noms de fichiers et répertoires
Les informations de cette section s’appliquent aux boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer et à l’ancien style.
Avant d’appeler les fonctions GetOpenFileName ou GetSaveFileName , le membre lpstrFile de la structure OPENFILENAME doit pointer vers la mémoire tampon pour recevoir le nom du fichier. Le membre nMaxFile doit spécifier la taille, en caractères, de la mémoire tampon lpstrFile . Pour une fonction ANSI, il s’agit du nombre d’octets, mais pour une fonction Unicode, il s’agit du nombre de caractères.
Si l’utilisateur spécifie un nom de fichier et clique sur le bouton OK , la boîte de dialogue copie le lecteur, le répertoire et le nom de fichier sélectionnés dans la mémoire tampon lpstrFile . La fonction définit également les membres nFileOffset et nFileExtension sur les décalages, en caractères, du début de la mémoire tampon au nom de fichier et à l’extension de nom de fichier, respectivement.
Pour récupérer uniquement le nom et l’extension du fichier, définissez le membre lpstrFileTitle pour qu’il pointe vers une mémoire tampon et définissez le membre nMaxFileTitle sur la taille, en caractères, de la mémoire tampon. Vous pouvez également passer la mémoire tampon lpstrFile dans un appel à la fonction GetFileTitle pour obtenir le nom d’affichage du fichier sélectionné. Notez toutefois que le nom de fichier retourné par GetFileTitle inclut une extension uniquement si c’est la préférence de l’utilisateur pour l’affichage des noms de fichiers.
La boîte de dialogue utilise le répertoire actif pour le processus d’appel comme répertoire initial à partir duquel afficher les fichiers et les répertoires. Utilisez les fonctions GetCurrentDirectory et SetCurrentDirectory pour obtenir et modifier le répertoire actif d’un processus. Pour spécifier un autre répertoire initial sans modifier votre répertoire actuel, utilisez le membre lpstrInitialDir pour spécifier le nom d’un répertoire. La boîte de dialogue modifie automatiquement votre répertoire actif lorsque l’utilisateur sélectionne un autre lecteur ou répertoire. Pour empêcher la boîte de dialogue de modifier votre répertoire actif, définissez l’indicateur OFN_NOCHANGEDIR . Cet indicateur n’empêche pas l’utilisateur de modifier les répertoires pour rechercher un fichier.
Pour spécifier une extension de nom de fichier par défaut, utilisez le membre lpstrDefExt . Si l’utilisateur spécifie un nom de fichier qui n’a pas d’extension, la boîte de dialogue ajoute votre extension par défaut. Si vous spécifiez une extension par défaut et que l’utilisateur spécifie un nom de fichier avec une autre extension, la boîte de dialogue définit l’indicateur OFN_EXTENSIONDIFFERENT .
Pour permettre à l’utilisateur de sélectionner plusieurs fichiers à partir d’un répertoire, définissez l’indicateur OFN_ALLOWMULTISELECT . Pour la compatibilité avec les applications plus anciennes, la boîte de dialogue de sélection multiple par défaut utilise l’interface utilisateur de style ancien. Pour afficher une boîte de dialogue de sélection multiple de style Explorer, vous devez également définir l’indicateur OFN_EXPLORER.
Si l’utilisateur sélectionne plusieurs fichiers, la mémoire tampon pointée vers le membre lpstrFile retourne le chemin d’accès au répertoire actif suivi des noms de fichiers sélectionnés. Le membre nFileOffset est le décalage par rapport au nom du premier fichier et le membre nFileExtension n’est pas utilisé. Le tableau suivant décrit la différence entre les boîtes de dialogue de style Explorer et d’ancien style dans le renvoi de plusieurs noms de fichiers.
Style de boîte de dialogue | Description |
---|---|
boîtes de dialogue de style Explorer | Les chaînes de répertoire et de nom de fichier sont séparées par null , avec un caractère NULL supplémentaire après le nom du dernier fichier. Ce format permet aux boîtes de dialogue de style Explorer de retourner des noms de fichiers longs qui incluent des espaces. |
Boîtes de dialogue anciennes | Les chaînes de répertoire et de nom de fichier sont séparées par des espaces. Pour les noms de fichiers avec des espaces, la fonction utilise des noms de fichiers courts. |
Vous pouvez utiliser la fonction FindFirstFile pour convertir des noms de fichiers longs et courts.
Si vous spécifiez OFN_ALLOWMULTISELECT et que l’utilisateur sélectionne un seul fichier, la chaîne lpstrFile n’a pas de séparateur entre le chemin d’accès et le nom du fichier.
Filtres
Les informations contenues dans cette section s’appliquent aux boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer et à l’ancien style.
Vous pouvez fournir des filtres de noms de fichiers pour aider l’utilisateur à limiter les noms de fichiers affichés dans la boîte de dialogue. Un filtre de nom de fichier se compose d’une paire de chaînes null terminées, d’une description et d’un modèle, l’un concaténé à l’autre. La boîte de dialogue affiche la description pour permettre à l’utilisateur de choisir le filtre à utiliser ; et il utilise le modèle pour sélectionner les fichiers à afficher.
Pour spécifier les filtres, définissez le membre lpstrFilter de la structure OPENFILENAME pour qu’il pointe vers une mémoire tampon qui contient un tableau de paires de chaînes de filtre. La dernière chaîne du tableau doit être suivie d’un caractère null supplémentaire.
Une chaîne de modèle peut être une combinaison de caractères de nom de fichier valides et de l’astérisque (*). L’astérisque est un caractère générique qui représente toute combinaison de caractères de nom de fichier valides. La boîte de dialogue affiche uniquement les fichiers qui correspondent au modèle. Pour spécifier plusieurs modèles pour la même description, vous devez utiliser un point-virgule (;) pour séparer les modèles. Notez que les espaces dans la chaîne de modèle peuvent produire des résultats inattendus.
Le fragment de code suivant spécifie deux filtres. Le filtre avec la description « Source » a deux modèles. Si l’utilisateur sélectionne ce filtre, la boîte de dialogue affiche uniquement les fichiers qui ont le . C et . Extensions CXX. Notez que dans le langage de programmation C, une chaîne placée entre guillemets doubles est terminée par null.
OPENFILENAME ofn; // common dialog box structure
ofn.lpstrFilter = "Source\0*.C;*.CXX\0All\0*.*\0"
ofn.nFilterIndex = 1;
Le membre nFilterIndex de la structure OPENFILENAME spécifie un index qui indique le filtre utilisé initialement par la boîte de dialogue. Le premier filtre de la mémoire tampon a l’index 1, le second 2, et ainsi de suite. Si l’utilisateur modifie le filtre lors de l’utilisation de la boîte de dialogue, le membre nFilterIndex est défini sur l’index du filtre sélectionné au retour.
Vous pouvez créer un filtre personnalisé en définissant le membre lpstrCustomFilter sur l’adresse d’une mémoire tampon qui contient un filtre unique et en définissant le membre nMaxCustFilter sur la taille de la mémoire tampon, en caractères ou en octets. La boîte de dialogue place toujours le filtre personnalisé au début de la liste des filtres et, au retour, met toujours à jour la partie modèle du filtre avec le modèle du filtre sélectionné par l’utilisateur.
Pour Explorer boîtes de dialogue de style, l’extension par défaut peut changer si l’utilisateur sélectionne un autre filtre. Si l’utilisateur sélectionne un filtre dont le premier modèle est de la forme *. xxx (autrement dit, l’extension n’inclut pas de caractère générique), la boîte de dialogue utilise xxx comme extension par défaut. Cela se produit uniquement si vous avez spécifié une extension par défaut dans le membre lpstrDefExt de la structure OPENFILENAME . Par exemple, si l’utilisateur sélectionne « Source\0*. C;*. Filtre CXX\0 », l’extension par défaut devient « C ». Toutefois, si vous aviez défini le filtre comme « Source\0*. C*\0 », l’extension par défaut ne change pas, car l’extension comprend un caractère générique.
Le message de notification CDN_INCLUDEITEM offre un autre moyen de filtrer les noms affichés par la boîte de dialogue. Pour utiliser ce message, fournissez une procédure de crochet OFNHookProc et spécifiez l’indicateur OFN_ENABLEINCLUDENOTIFY dans la structure OPENFILENAME lorsque vous créez la boîte de dialogue. Chaque fois que l’utilisateur ouvre un dossier, la boîte de dialogue envoie une notification CDN_INCLUDEITEM à votre procédure de crochet pour chaque élément du dossier nouvellement ouvert. La valeur de retour de la procédure de crochet indique si la boîte de dialogue doit afficher l’élément dans la liste des éléments du dossier.
Validation de fichiers et de répertoires
Sauf indication contraire, les informations contenues dans cette section s’appliquent aux boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer et àl’ancien style.
La boîte de dialogue valide automatiquement les noms de fichiers tapés par l’utilisateur pour s’assurer que les noms contiennent uniquement des caractères valides. Pour remplacer la validation du caractère du nom de fichier, définissez l’indicateur OFN_NOVALIDATE .
Pour forcer la boîte de dialogue à vérifier que l’utilisateur a spécifié le nom d’un fichier existant, définissez l’indicateur OFN_FILEMUSTEXIST . Pour forcer la vérification de l’existence du chemin spécifié, définissez l’indicateur OFN_PATHMUSTEXIST . Si vous définissez l’indicateur OFN_CREATEPROMPT , la boîte de dialogue invite l’utilisateur à autoriser la création d’un fichier inexistant. Si cet indicateur est défini et que l’utilisateur choisit de créer un fichier, la boîte de dialogue se ferme et la fonction retourne le nom spécifié. Sinon, la boîte de dialogue reste ouverte.
Lorsque vous utilisez la boîte de dialogue Enregistrer sous, vous pouvez indiquer à la boîte de dialogue d’inviter l’utilisateur à l’autorisation de remplacer un fichier existant en définissant l’indicateur OFN_OVERWRITEPROMPT .
Par défaut, la boîte de dialogue crée un fichier de test de longueur nulle pour déterminer si un nouveau fichier peut être créé dans le répertoire sélectionné. Pour empêcher la création de ce fichier de test, définissez l’indicateur OFN_NOTESTFILECREATE .
Si vous activez une procédure de hook, la boîte de dialogue avertit votre procédure de hook lorsqu’une violation de partage réseau se produit pour le nom de fichier spécifié par l’utilisateur. Si vous définissez l’indicateur OFN_EXPLORER , la boîte de dialogue envoie le message CDN_SHAREVIOLATION à la procédure de hook. Si vous ne définissez pas OFN_EXPLORER, la boîte de dialogue envoie le message inscrit SHAREVISTRING à la procédure de hook. Pour empêcher la boîte de dialogue d’envoyer des notifications pour les violations de partage, définissez l’indicateur OFN_SHAREAWARE .
Si l’utilisateur sélectionne la zone de case activée en lecture seule, la boîte de dialogue définit l’indicateur OFN_READONLY retour. Pour masquer la zone Ouvrir en lecture seule case activée, définissez l’indicateur OFN_HIDEREADONLY. Pour empêcher la boîte de dialogue de renvoyer des noms de fichiers existants qui ont l’attribut lecture seule, définissez l’indicateur OFN_NOREADONLYRETURN .
Pour empêcher la boîte de dialogue de déréférencer les fichiers de lien, définissez la valeur OFN_NODEREFERENCELINKS . Dans ce cas, la boîte de dialogue retourne le nom du fichier de liaison plutôt que le nom du fichier référencé par le fichier de liaison.
Personnalisation de la boîte de dialogue Ouvrir et enregistrer sous
Vous pouvez personnaliser une boîte de dialogue Ouvrir ou Enregistrer sous en fournissant une procédure de hook, un modèle personnalisé ou les deux. Toutefois, les versions de style Explorer et d’ancien style des boîtes de dialogue diffèrent par leur utilisation de modèles personnalisés et de procédures de crochet.
Pour plus d’informations sur la personnalisation d’une boîte de dialogue de style Explorer, consultez Procédures de crochet de style Explorer, Modèles personnalisés de style Explorer et Identificateurs de contrôle de style Explorer. Pour plus d’informations sur la personnalisation d’une boîte de dialogue de style ancien, consultez Personnalisation de Old-Style boîtes de dialogue.
Le tableau suivant récapitule les différences entre les deux styles.
Personnalisation | Description |
---|---|
procédure Hook de style Explorer | La procédure de hook reçoit les messages de notification envoyés à partir de la boîte de dialogue commune et les messages pour tous les contrôles supplémentaires que vous avez définis en spécifiant un modèle de boîte de dialogue enfant. La procédure de hook ne reçoit pas de messages pour les contrôles standard de la boîte de dialogue par défaut. |
modèle personnalisé de style Explorer | Le système utilise le modèle personnalisé pour créer une boîte de dialogue enfant. Le modèle peut définir des contrôles supplémentaires et spécifier l’emplacement du cluster de contrôles standard. Le modèle personnalisé ne remplace pas le modèle par défaut. |
Ancienne procédure Hook | La procédure de hook reçoit tous les messages envoyés à la boîte de dialogue, y compris les messages pour les contrôles standard et tous les contrôles personnalisés. La procédure de hook reçoit également les messages inscrits envoyés à partir de la boîte de dialogue commune. |
Ancien modèle personnalisé | Le modèle personnalisé remplace le modèle par défaut. Créez le modèle personnalisé en modifiant le modèle par défaut spécifié dans le fichier Fileopen.dlg. |
Le titre par défaut des boîtes de dialogue de style Explorer et de style ancien est « Ouvrir » ou « Enregistrer sous ». Pour modifier le titre, spécifiez le nouveau titre dans le membre lpstrTitle de la structure OPENFILENAME.
La ruche de registre HKEY_CURRENT_USER d’un utilisateur peut contenir des valeurs qui personnalisent le contenu des boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer. Ces entrées de Registre affectent uniquement les boîtes de dialogue affichées pour l’utilisateur associé à la ruche du Registre.
Pour masquer les fonctionnalités des boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer, un administrateur peut définir les valeurs dans le tableau suivant sous cette sous-clé :
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Comdlg32
Nom de la valeur | Valeur | Signification |
---|---|---|
NoPlacesBar | 1 | Masque la barre des emplacements. |
NoFileMRU | 1 | Masque la liste mru (Most Recently Used). |
NoBackButton | 1 | Masque le bouton Précédent . |
Le contenu de la barre Emplacements est déterminé par le contenu de la sous-clé suivante :
HKEY_CURRENT_USER
Software
Microsoft
Windows
CurrentVersion
Policies
Comdlg32
Placesbar
Actuellement, il ne peut y avoir que cinq entrées sous cette clé, et l’index valeur/nom est de base zéro. Les noms des entrées doivent être Place0, Place1, Place2, Place3 et Place4. Les valeurs des entrées peuvent être REG_DWORD, REG_SZ ou REG_EXPAND_SZ valeurs qui identifient les emplacements à inclure dans la barre des emplacements.
Type de valeur | Signification |
---|---|
REG_DWORD | Valeur CSIDL qui identifie un dossier. Pour obtenir la liste des valeurs CSIDL, consultez Valeurs CSIDL. |
REG_SZ ou REG_EXPAND_SZ | Chaîne terminée par null qui spécifie un chemin d’accès valide. |
Procédures de crochet Explorer-Style
Vous pouvez personnaliser une boîte de dialogue Ouvrir ou Enregistrer sous de style Explorer en fournissant une procédure de hook, un modèle personnalisé ou les deux. Si vous fournissez une procédure de crochet pour une boîte de dialogue de style Explorer, le système crée une boîte de dialogue enfant de la boîte de dialogue par défaut. La procédure de hook fait office de procédure de boîte de dialogue pour la boîte de dialogue enfant. Cette boîte de dialogue enfant est basée sur le modèle personnalisé ou sur un modèle par défaut si aucun n’est fourni. Pour plus d’informations, consultez Modèles personnalisés de style Explorer.
Pour activer une procédure de hook pour une boîte de dialogue Ouvrir ou Enregistrer sous de style Explorer, utilisez la structure OPENFILENAME lorsque vous créez la boîte de dialogue. Définissez les indicateurs OFN_ENABLEHOOK et OFN_EXPLORER dans le membre Flags et spécifiez l’adresse d’une procédure de crochet OFNHookProc dans le membre lpfnHook . Si vous fournissez une procédure de hook et omettez l’indicateur OFN_EXPLORER , vous devez utiliser une procédure de hook OFNHookProcOldStyle et vous obtiendrez l’ancienne interface utilisateur. Pour plus d’informations, consultez Personnalisation des boîtes de dialogue Old-Style.
Une procédure de crochet de style Explorer reçoit divers messages lorsque la boîte de dialogue est ouverte. Leurs thèmes sont les suivants :
- Le WM_INITDIALOG message et d’autres messages de boîte de dialogue standard, tels que le message de couleur de contrôle WM_CTLCOLORDLG .
- Ensemble de WM_NOTIFY messages de notification indiquant les actions effectuées par l’utilisateur ou d’autres événements de boîte de dialogue.
- Messages pour tous les contrôles supplémentaires que vous avez définis en spécifiant un modèle de boîte de dialogue enfant.
En outre, il existe un ensemble de messages que vous pouvez envoyer à une boîte de dialogue de style Explorer pour obtenir des informations ou pour contrôler le comportement et l’apparence de la boîte de dialogue.
Si vous fournissez une procédure de hook pour une boîte de dialogue de style Explorer, la procédure de boîte de dialogue par défaut crée une boîte de dialogue enfant lorsque la procédure de dialogue par défaut traite son WM_INITDIALOG message. La procédure de hook fait office de procédure de boîte de dialogue pour la boîte de dialogue enfant. À ce stade, la procédure de hook reçoit son propre message WM_INITDIALOG avec le paramètre lParam défini sur l’adresse de la structure OPENFILENAME utilisée pour initialiser la boîte de dialogue. Une fois que la boîte de dialogue enfant a terminé de traiter son propre message WM_INITDIALOG , la procédure de dialogue par défaut déplace les contrôles standard, si nécessaire, pour faire de la place pour tous les contrôles supplémentaires de la boîte de dialogue enfant. La procédure de boîte de dialogue par défaut envoie ensuite le message de notification CDN_INITDONE à la procédure de hook.
La procédure de hook reçoit WM_NOTIFY messages de notification indiquant les actions effectuées par l’utilisateur dans la boîte de dialogue. Vous pouvez utiliser certains de ces messages pour contrôler le comportement de la boîte de dialogue. Par exemple, la procédure de crochet reçoit le message CDN_FILEOK lorsque l’utilisateur choisit un nom de fichier et clique sur le bouton OK . En réponse à ce message, la procédure de hook peut utiliser la fonction SetWindowLong pour rejeter le nom sélectionné et forcer l’ouverture de la boîte de dialogue.
Le paramètre lParam pour chaque message WM_NOTIFY est un pointeur vers une structure OFNOTIFY ou OFNOTIFYEX qui définit l’action. Le membre de code dans l’en-tête de cette structure contient l’un des messages de notification suivants.
Message | Signification |
---|---|
CDN_FILEOK | L’utilisateur a cliqué sur le bouton OK ; la boîte de dialogue est sur le point de se fermer. |
CDN_FOLDERCHANGE | L’utilisateur a ouvert un nouveau dossier ou répertoire. |
CDN_HELP | L’utilisateur a cliqué sur le bouton Aide . |
CDN_INCLUDEITEM | Détermine si un élément doit être affiché. Lorsque l’utilisateur ouvre un nouveau dossier ou répertoire, le système envoie cette notification pour chaque élément du dossier ou du répertoire. Le système envoie cette notification uniquement si l’indicateur OFN_ENABLEINCLUDENOTIFY a été défini. |
CDN_INITDONE | Le système a terminé l’initialisation de la boîte de dialogue et la boîte de dialogue a terminé de traiter le message WM_INITDIALOG . En outre, le système a terminé d’organiser les contrôles dans la boîte de dialogue commune pour faire de l’espace pour les contrôles de la boîte de dialogue enfant (le cas échéant). |
CDN_SELCHANGE | L’utilisateur a sélectionné un nouveau fichier ou dossier dans la liste des fichiers. |
CDN_SHAREVIOLATION | La boîte de dialogue courante a rencontré une violation de partage sur le fichier sur le point d’être retourné. |
CDN_TYPECHANGE | L’utilisateur a sélectionné un nouveau type de fichier dans la liste des types de fichiers. |
Ces messages WM_NOTIFY remplacent les messages enregistrés FILEOKSTRING, LBSELCHSTRING, SHAREVISTRING et HELPMSGSTRING utilisés par les versions précédentes des boîtes de dialogue Ouvrir et Enregistrer sous. Toutefois, la procédure de raccordement reçoit également le message remplacé après le message WM_NOTIFY si le traitement WM_NOTIFY n’utilise pas SetWindowLong pour définir une valeur de DWL_MSGRESULT différente de zéro.
Pour récupérer des informations sur la status de la boîte de dialogue ou pour contrôler le comportement et l’apparence de la boîte de dialogue, la procédure de raccordement peut envoyer les messages suivants à la boîte de dialogue.
Message | Signification |
---|---|
CDM_GETFILEPATH | Récupère le chemin d’accès et le nom du fichier sélectionné. |
CDM_GETFOLDERIDLIST | Récupère la liste d’identificateurs d’élément correspondant au dossier actif que la boîte de dialogue a ouverte. Pour plus d’informations sur les listes d’identificateurs d’élément, consultez Présentation de l’espace de noms Shell. |
CDM_GETFOLDERPATH | Récupère le chemin du dossier ou du répertoire actif de la boîte de dialogue. |
CDM_GETSPEC | Récupère le nom de fichier (sans inclure le chemin d’accès) du fichier actuellement sélectionné dans la boîte de dialogue. |
CDM_HIDECONTROL | Masque le contrôle spécifié. |
CDM_SETCONTROLTEXT | Définit le texte dans le contrôle spécifié. |
CDM_SETDEFEXT | Définit l’extension de nom de fichier par défaut pour la boîte de dialogue. |
modèles personnalisés Explorer-Style
Pour définir des contrôles supplémentaires pour une boîte de dialogue Ouvrir ou Enregistrer sous de style Explorer, utilisez la structure OPENFILENAME pour spécifier un modèle pour une boîte de dialogue enfant qui contient les contrôles supplémentaires. Si votre modèle de boîte de dialogue enfant est une ressource dans une application ou une bibliothèque de liens dynamiques, définissez l’indicateur OFN_ENABLETEMPLATE dans le membre Flags et utilisez les membres hInstance et lpTemplateName de la structure pour identifier le nom du module et de la ressource. Si le modèle est déjà en mémoire, définissez l’indicateur OFN_ENABLETEMPLATEHANDLE et utilisez le membre hInstance pour identifier l’objet mémoire qui contient le modèle. Lorsque vous fournissez un modèle de boîte de dialogue enfant pour une boîte de dialogue de style Explorer, vous devez également définir l’indicateur OFN_EXPLORER ; sinon, le système suppose que vous fournissez un modèle de remplacement pour une boîte de dialogue de style ancien. En règle générale, si vous fournissez des contrôles supplémentaires, vous devez également fournir une procédure de raccordement de style Explorer pour traiter les messages des nouveaux contrôles.
Vous pouvez créer votre modèle de boîte de dialogue enfant comme vous le faites avec n’importe quel autre modèle, sauf que vous devez spécifier les styles WS_CHILD et WS_CLIPSIBLINGS et les styles DS_3DLOOK et DS_CONTROL . Le système nécessite le style WS_CHILD , car votre modèle définit une boîte de dialogue enfant de la boîte de dialogue Ouvrir ou Enregistrer sous par défaut. Le style WS_CLIPSIBLINGS garantit que la boîte de dialogue enfant ne s’affiche pas sur les contrôles de la boîte de dialogue par défaut. Le style DS_3DLOOK garantit que l’apparence des contrôles dans la boîte de dialogue enfant est cohérente avec les contrôles de la boîte de dialogue par défaut. Le style DS_CONTROL permet à l’utilisateur d’utiliser la touche TAB et d’autres touches de navigation pour se déplacer entre tous les contrôles, par défaut ou personnalisés, dans la boîte de dialogue personnalisée.
Pour libérer de l’espace pour les nouveaux contrôles, le système développe la boîte de dialogue par défaut en fonction de la largeur et de la hauteur de la boîte de dialogue personnalisée. Par défaut, tous les contrôles de la boîte de dialogue personnalisée sont placés sous les contrôles de la boîte de dialogue par défaut. Toutefois, vous pouvez remplacer ce positionnement par défaut en incluant un contrôle de texte statique dans votre modèle de boîte de dialogue personnalisée et en lui affectant la valeur d’identificateur de contrôle de stc32. (Cette valeur est définie dans le fichier d’en-tête Dlgs.h.) Dans ce cas, le système utilise le contrôle comme point de référence pour déterminer où positionner les nouveaux contrôles. Tous les nouveaux contrôles au-dessus et à gauche du contrôle stc32 sont positionnés de la même quantité au-dessus et à gauche des contrôles dans la boîte de dialogue par défaut. Les nouveaux contrôles situés en dessous et à droite du contrôle stc32 sont positionnés en dessous et à droite des contrôles par défaut. En général, chaque nouveau contrôle est positionné de sorte qu’il ait la même position par rapport aux contrôles par défaut que le contrôle stc32 . Pour libérer de l’espace pour ces nouveaux contrôles, le système ajoute de l’espace à gauche, à droite, en bas et en haut de la boîte de dialogue par défaut en fonction des besoins.
Le système exige que la procédure de raccordement traite tous les messages destinés à la boîte de dialogue personnalisée et envoie donc les mêmes messages de fenêtre à la procédure de raccordement qu’à toute autre procédure de boîte de dialogue. Par exemple, la procédure de raccordement reçoit des messages WM_COMMAND lorsque l’utilisateur clique sur les contrôles de bouton dans la boîte de dialogue personnalisée. La procédure de raccordement est responsable de l’initialisation de ces contrôles et de la récupération des valeurs à partir des contrôles lorsque la boîte de dialogue est fermée. Notez que lorsque la procédure de raccordement reçoit le message WM_INITDIALOG , le système n’a pas encore déplacé les contrôles vers leurs positions finales.
La procédure de boîte de dialogue par défaut gère les messages de tous les contrôles de la boîte de dialogue par défaut, mais la procédure de raccordement reçoit les messages de notification pour les actions de l’utilisateur sur ces contrôles, comme décrit dans procédures de raccordement de style Explorer.
Identificateurs de contrôle Explorer-Style
Le Kit de développement logiciel (SDK) Windows fournit le modèle de boîte de dialogue par défaut pour les boîtes de dialogue de style ancien, mais n’inclut pas le modèle par défaut pour les boîtes de dialogue de style Explorer. Cela est dû au fait que les boîtes de dialogue de style Explorer vous permettent d’ajouter vos propres contrôles, mais ne prennent pas en charge la modification du modèle pour les contrôles standard. Toutefois, dans certains cas, vous devrez peut-être connaître les identificateurs de contrôle utilisés dans les modèles par défaut. Par exemple, les messages CDM_HIDECONTROL et CDM_SETCONTROLTEXT nécessitent un identificateur de contrôle.
Le tableau suivant présente les identificateurs des contrôles standard dans les boîtes de dialogue Ouvrir et Enregistrer sous de style Explorer. Les identificateurs sont des constantes définies dans Dlgs.h et Winuser.h.
Identificateur de contrôle | Description du contrôle |
---|---|
chx1 | Zone de case activée en lecture seule |
cmb1 | Zone de liste déroulante qui affiche la liste des filtres de type de fichier |
stc2 | Étiquette de la zone de liste modifiable cmb1 |
cmb2 | Zone de liste déroulante qui affiche le lecteur ou le dossier actuel, et qui permet à l’utilisateur de sélectionner un lecteur ou un dossier à ouvrir |
stc4 | Étiquette de la zone de liste modifiable cmb2 |
cmb13 | Zone de liste déroulante qui affiche le nom du fichier actif, permet à l’utilisateur de taper le nom d’un fichier à ouvrir et de sélectionner un fichier qui a été ouvert ou enregistré récemment. Il s’agit d’applications antérieures compatibles Explorer sans hook ni modèle de boîte de dialogue. Comparez avec edt1. |
edt1 | Contrôle de modification qui affiche le nom du fichier actif ou permet à l’utilisateur de taper le nom du fichier à ouvrir. Comparez avec cmb13. |
stc3 | Étiquette de la zone de liste modifiable cmb13 et du contrôle d’édition edt1 |
lst1 | Zone de liste qui affiche le contenu du lecteur ou du dossier actif |
stc1 | Étiquette de la zone de liste lst1 |
IDOK | Bouton de commande OK (bouton pousseur) |
IDCANCEL | Bouton de commande Annuler (bouton poussurer) |
pshHelp | Bouton de commande Aide (bouton poussurer) |
Personnalisation des boîtes de dialogue Old-Style
Vous pouvez personnaliser une ancienne boîte de dialogue Ouvrir ou Enregistrer sous en fournissant une procédure de hook OFNHookProcOldStyle qui reçoit des messages ou des notifications destinés à la procédure de boîte de dialogue par défaut. Vous pouvez également fournir un modèle personnalisé à utiliser à la place du modèle par défaut. Les procédures de raccordement et les modèles utilisés avec les boîtes de dialogue de style ancien sont similaires à ceux utilisés avec les autres boîtes de dialogue courantes. Pour plus d’informations, consultez Procédures de raccordement pour les boîtes de dialogue courantes et les modèles personnalisés.
Pour activer une procédure de raccordement pour une boîte de dialogue Ouvrir ou Enregistrer sous de style ancien, utilisez la structure OPENFILENAME lorsque vous créez la boîte de dialogue. Définissez l’indicateur OFN_ENABLEHOOK dans le membre Flags et spécifiez l’adresse d’une procédure de hook OFNHookProcOldStyle dans le membre lpfnHook . La procédure de boîte de dialogue envoie un message WM_INITDIALOG à la procédure de raccordement avec le paramètre Param défini sur l’adresse de la structure OPENFILENAME utilisée pour initialiser la boîte de dialogue.
Vous pouvez utiliser la structure OPENFILENAME pour spécifier un modèle personnalisé pour la boîte de dialogue Ouvrir ou Enregistrer sous à utiliser à la place du modèle par défaut. Si votre modèle personnalisé est une ressource dans une application ou une bibliothèque de liens dynamiques, définissez l’indicateur OFN_ENABLETEMPLATE dans le membre Indicateurs et utilisez les membres hInstance et lpTemplateName de la structure pour identifier le nom du module et de la ressource. Si votre modèle personnalisé est déjà en mémoire, définissez l’indicateur OFN_ENABLETEMPLATEHANDLE et utilisez le membre hInstance pour identifier l’objet mémoire qui contient le modèle. Créez le modèle personnalisé en modifiant le modèle par défaut spécifié dans le fichier Fileopen.dlg. Les identificateurs de contrôle utilisés dans les modèles de boîte de dialogue Rechercher et remplacer par défaut sont définis dans le fichier Dlgs.h.
Par défaut, les fonctions GetOpenFileName et GetSaveFileName affichent les boîtes de dialogue de style Explorer. Si vous souhaitez afficher une boîte de dialogue de style ancien, vous devez fournir une procédure de hook OFNHookProcOldStyle et vous assurer que l’indicateur OFN_EXPLORER n’est pas défini dans le membre Flags de la structure OPENFILENAME .
Si vous définissez l’indicateur OFN_EXPLORER, le système traite une procédure de raccordement ou un modèle personnalisé comme une personnalisation de style Explorer. Pour plus d’informations sur la personnalisation d’une boîte de dialogue de style Explorer, consultez modèles personnalisés de style Explorer.