Explorateur

ED_34 Messages postés 15 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 11 mai 2004 - 1 mai 2004 à 16:13
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 - 10 nov. 2005 à 21:00
Bonjour,

Je débute en C++ et j'utilise Visual C++ 6. J'ai un mal de chien à comprendre comment on fait pour faire un petit explorateur tout bête afin de pouvoir se balader dans les dossiers pour selectionner un fichier. Apparement il faut se servir d'un CTreeList, mais c'a à l'air super compliqué...

Quelqun a une idée pour faire quelque chose de basic mais fonctionnel? Meme en utilisant une Clist.... je sait pas comment m'en sortir... :-(

ED

6 réponses

glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
1 mai 2004 à 16:43
Ben si tu veux pas te prendre la tete : GetOpenFileName()
C'est fait pour ça :)

Sinon le mieux c'est d'utiliser une TreeView, mais c'est pas tres simple. Voila un source que j'ai déposé ya pas longtemps :
http://www.cppfrance.com/code.aspx?ID=22072

Peut-être que ça peut-aider. Ou tu peux aussi chercher "explorateur" sur les sources de cppfrance, il doit y en avoir pas mal.

GetOpenFileName() reste quand même de tres loin le plus simple, c'est une fonction qui est faite pour ça :)

++ Glipper
0
ED_34 Messages postés 15 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 11 mai 2004
1 mai 2004 à 16:55
OK merci beaucoup pour le GetOpenFileName()!!!!! tu me sauves la vie... je vais le tester!

Merci aussi pour ta source, je la télécharge et la teste après. EN ce qui concerne explorateur dans ccp france... c galère! il y a des millions de resultats qui sont tous très valables mais super compliqués...

Je part tester tout ça... Merci beaucoup

ED
0
bloobird0 Messages postés 30 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 23 octobre 2008
13 juil. 2005 à 18:03
sympa ce GetOpenFileName,

j'aurai une autre demande dans le même genre, comment afficher un dialogue qui demande de selectionner un répertoire (et uniquement un répertoire)?

Merci d'avance
0
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
13 juil. 2005 à 20:53
SHGetPathFromIDList()



exemple :



char DEF_CHEMIN_FILE[MAX_PATH]; // variable qui contiendra l'adresse du repertoire



BROWSEINFO bi;

bi.hwndOwner=hWnd;

bi.pidlRoot=NULL; // repertoire de depart (par defaut la racine)

bi.pszDisplayName=&DEF_CHEMIN_FILE[0];

bi.lpszTitle="Selectionner un repertoire...";

bi.ulFlags=0; // Divers options voir msdn

bi.lpfn=NULL; // gestion des erreurs

ITEMIDLIST *Item;

Item = SHBrowseForFolder(&bi);

SHGetPathFromIDList(Item,&DEF_CHEMIN_FILE[0]);



Voila voila !

Bon j'ai recuperé ça dans un de mes programmes... mieux vaux regarder
dans MSDN comment remplir la structure proprement peut-être.

Glipper
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_simeric Messages postés 3 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 9 novembre 2005
9 nov. 2005 à 09:20
Salut

Par défault, le dialogue place le focus sur le "Poste de travail"
Est-ce que quelqu'un saurait comment définir un autre dossier par défaut ?
0
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 1
10 nov. 2005 à 21:00
Bonjour,



Voila une solution que j'ai trouvé en faisant une petite recherche sur le web :



déjà tu rajoutes la librairie COMDEF.H

#include <COMDEF.H>



ensuite cette fonction quelque part dans ton programme :



HRESULT CreatePIDL(LPCTSTR pstrPath, LPITEMIDLIST* pItemIDList)

{

// I'm lazy and used _bstr_t to convert to wide

// characters. You'll have to link to comsupp.lib

// and #include <comutil.h>

_bstr_t bstrPath(pstrPath);



LPSHELLFOLDER pShellFolder;

HRESULT hr = SHGetDesktopFolder(&pShellFolder);

if (SUCCEEDED(hr))

{

hr = pShellFolder->ParseDisplayName(NULL, NULL, bstrPath,

NULL, pItemIDList, NULL);



pShellFolder->Release();

}



return hr;

}



et enfin quand tu initialise ta boite de dialogue :




BROWSEINFO bi;

....

LPITEMIDLIST pidlRoot;

pidlRoot = NULL;

CreatePIDL("C:\\Program Files", &pidlRoot);

bi.pidlRoot = pidlRoot;

....



Voila....



Glipper



ps : attention, je crois qu'il faut liberer la mémoire apres l'ouverture d'une telle boite de dialogue : "The calling application is responsible for freeing the returned item identifier
list using the shell’s task allocator. "
0
Rejoignez-nous