Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
FORUMS C FAQs C TUTORIELS C LIVRES C COMPILATEURS C SOURCES GTK+

Tutorial d'initiation
A la programmation avec l'API Windows

Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
PrécédentIndexSuivant

Chapitre 2

Les boîtes de dialogue

12. Parcourir l'arborescence

Cours théorique :

Pour permettre à l'utilisateur de sélectionner un dossier ou un fichier, on utilisera respectivement les fonctions SHBrowseForFolder() et GetOpenFileName(). Ces deux fonctions affichent les boîtes de dialogue standard de Windows pour parcourir l'arborescence à la recherche d'un dossier ou d'un fichier. Notons que la constante MAX_PATH désigne la longueur standard pour un chemin. Les buffers chargés de recevoir les noms de fichiers ou les chemins sont supposés faire au moins cette taille.

Voici un exemple d'utilisation de la fonction SHBrowseForFolder() :

BROWSEINFO bi;
LPITEMIDLIST Item;
// Ici, la taille du buffer ne peut pas être passée
// buffer est supposé être de taille MAX_PATH (ou plus)
char buffer[MAX_PATH];

// On met tous les champs inutilisés à 0
memset(&bi,0,sizeof(BROWSEINFO));
// hDlg est le HWND de la boite de dialogue qui demande l'ouverture
// Ou NULL si la boite de dialogue n'a pas de fenêtre parent
bi.hwndOwner=Dlg;
// Contient le répertoire initial ou NULL
bi.pidlRoot=NULL;
bi.pszDisplayName=buffer;
bi.lpszTitle="Répertoire courant";
bi.ulFlags=NULL;
bi.lParam=NULL;
Item=SHBrowseForFolder(&bi);
if(Item!=NULL)
{
    // buffer contient le nom du répertoire sélectionné
    SHGetPathFromIDList(Item,buffer);
    // buffer contient le chemin complet de la sélection
}

Voici un exemple d'utilisation de la fonction GetOpenFileName() :

OPENFILENAME st;
char buffer[MAX_PATH];

// Pas de fichier par défaut
buf[0]='';
// On met tous les champs inutilisés à 0
memset(&st,0,sizeof(OPENFILENAME));
st.lStructSize=sizeof(OPENFILENAME);
// hDlg est le HWND de la boite de dialogue qui demande l'ouverture
// Ou NULL si la boite de dialogue n'a pas de fenêtre parent
st.hwndOwner=hDlg;
// La syntaxe est : Description1Filtre1Description2Filtre2
st.lpstrFilter="Executables - Fichiers de commandes*.exe;*.bat";
st.lpstrFile=buffer;
st.nMaxFile=MAX_PATH;
st.lpstrTitle="Recherche de l'exécutable";
st.Flags=NULL;
// Contient le répertoire initial ou NULL
st.lpstrInitialDir=NULL;
if(GetOpenFileName(&st))
    // buffer contient notre chemin

PrécédentIndexSuivant

Responsable bénévole de la rubrique C : Arnaud Feltz (buchs) - Contacter par EMail :
Vos questions techniques : forum d'entraide C - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.