Permettre la sélection d'un fichier
Dans un programme permettant la lecture ou la sauvegarde de fichier dans un répertoire précis, il peut être utile de présenter à l'utilisateur une fenêtre lui permettant de choisir son fichier ou répertoire. Bien entendu, inutile de réinventer la roue. Windows propose des solutions déjà toutes faites:
Sélectionner un fichier pour une lecture à partir d'une boîte de dialogue
GetOpenFileName()
Bien entendu, il sera possible de sélectionner le disque, répertoire, ...
Syntaxe:
BOOL GetOpenFileName(
LPOPENFILENAME lpofn
);
Sélectionner un fichier pour une sauvegarde à partir d'une boîte de dialogue
GetSaveFileName()
En fait, cette fonction est identique à la précédente.
BOOL GetOpenFileName(
LPOPENFILENAME lpofn
);
Où lpofn est un pointeur sur une structure de type OPENFILENAME déclarée dans COMMDLG.H
Sélectionner un répertoire à partir d'une boîte de dialogue
SHBrowseForFolder()
SHGetSpecialFolderLocation
Les fonctions GetOpenFileName et GetSaveFileName utilisent une structure
de type OPENFILENAME dans COMMDLG.H
lStructSize taille de la structure
hwndOwner : fenêtre parent
lpstrFilter : Filtres
nFilterIndex va indiquer l'extension choisie par l'utilisateur
lpstrFileTitle : pointeur sur un buffer destiné à recevoir le
nom du fichier sélectionné
nMaxFileTitle : nb. car maxi ?
Flags : option de la boîte de dialogue (par exemple OFN_CREATEPROMPT pour
demander à l'utilisateur s'il faut créer le fichier si celui-ci
n'existe pas.
lpstrDefExt : extension par défaut si l'utilisateur n'en a pas précisé
une.
Exemple de filtres:
static char *szFilter[] ={"Fichier Texte (*.TXT)", "*.txt",
"Fichier ASCII (*.ASC)", "*.ASC",
""};
static OPENFILENAME ofn;
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.hInstance = NULL;
ofn.lpstrFilter = szFilter[0];
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
...