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
);

Où lpofn est un pointeur sur une structure de type OPENFILENAME déclarée dans COMMDLG.H

 

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;
...