Definition de LPCITEMIDLIST

Résolu
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009 - 17 mars 2006 à 18:56
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 21 mars 2006 à 11:00
Bonjour, je cherche a afficher une boite de type SHGetPathFromIDList maisdont le repertoire n'est pas le root. D'apres ce que j'ai compris il faut rentre une vairable de type LPCITEMIDLIST dans pr.pidlRoot
le probleme c'est que je ne sais pas comment la definir. SI quelqu'un a une reponse

d'avance merci

14 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 mars 2006 à 22:04
Excuse si tu l'as mal pris (à ma relecture ok que ça pouvait être mal pris).
Now je vois exact ce que tu veux, tu obtiendras ton item par ILCreateFromPathW(), suffit de lui passer une chaine UNICODE contenant un dossier valide, ne pas oublier de libérer la mémoire ensuite.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 mars 2006 à 00:23
Je t'ai fait ça, en espérant que c'est ce dont tu as besoin:
SELECTEUR DOSSIER REDUIT
http://dev.winsysdev.com/viewsrc.php?id=43

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 mars 2006 à 19:33
SHGetPathFromIDList n'affiche pas de boite de sélection.
Si c'est pour un sélecteur de dossier:
SELECTEUR DE DOSSIER (WIN32)
http://www.cppfrance.com/code.aspx?id=17138

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009
17 mars 2006 à 22:13
Ben voici mon code :


case IDC_BUTTON_DATAFILEFOLDER:


BROWSEINFO bi;


LPITEMIDLIST Item;


memset(&bi,0,
sizeof(BROWSEINFO));


bi.hwndOwner=Dlg;


bi.pidlRoot=NULL;


bi.pszDisplayName=folder;


bi.lpszTitle="Choose the folder please";


bi.ulFlags=NULL;


bi.lParam=NULL;


Item=SHBrowseForFolder(&bi);



if(Item!=NULL)


{


SHGetPathFromIDList(Item,folder);


Chofol = 1;


}


SetDlgItemText(Dlg, IDC_TEXTBOX_DATAFILEFOLDER, folder);



return TRUE;

Je ne comprends pas ta remarque car qd je clic sur mon bouton Folder j'ai bien une boite de dialogu qui s'affiche. D'ailleur la voila:

Mainteant je cherche a avoir un repertoire par defaut. Merci
0

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

Posez votre question
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009
17 mars 2006 à 22:22
Et d'apres ce que j'ai pu voir dans la code que tu m'a fournit, le fichier n'est pas initialiser, c;est a dire car bi.pidlroot n'existe pas. Je penses donc qu'il est initiliaser a null ce qui revient a ce que je fait.
Voila
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 mars 2006 à 22:49
C'est SHBrowseForFolder() qui fournit la boite.
Le dossier cible s'initialise dans la callback, regarde ma source.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 mars 2006 à 22:50
Faut aussi libérer la mémoire de Item.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009
20 mars 2006 à 15:29
Bon je penses qu'encore une fois j'ai du mal m'exprimer, ou bien alors je n'est vraiment rien comrpis au fonctionnement de cette fonction. Voila J'ai bien compris que tu envyer la variable
szdir a la boite de dialogue et c'est ce que tu appel une fonction pour lui donner sa valeur. Moi ce que je cherche a faire ce n'est pas ca. En fait je veux que lorsque j'appel la boite de dialogu avec SHBrowseForFolder() le fichier selectionner ne soit pas le root. Par exemple, losrque tu appel cette API en inialisant le bi.pidlroot a NULL. tu te retrouve avec la boite de dialogu ci dessus. Mais comment faire pour que, lorsque tu appel cette API, la boite de dialogu est deja ouvert le dossier mes document par exemple. Comme ca tu n'as plus qu'a choisir un dossier dans mes documents!!
D'apres ce que j'ai lu il faut initialiser le bi.pidlroot qui est un type LPCITEMIDLIST, le probleme c'est que je ne sais pas comment faire. En esperant avoir etet clair

merci
0
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009
20 mars 2006 à 15:30
Comment liberer le memoire de Item
merci
0
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009
20 mars 2006 à 15:34
Faut il que je rajoute la ligne suivante juste avant le return true?



if(SUCCEEDED(SHGetMalloc(&pMalloc))) {pMalloc->Free(lpItemLst); pMalloc->Release();}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 mars 2006 à 15:44
Pourtant pas compliqué de faire un copier coller de mon code, non ?
C'est BrowseCallbackProc() qui initialise le dossier de la boite.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009
20 mars 2006 à 18:16
He mon gars pour commencer je te demanderai de ne pas me parler comme a un demeurer mental, c'est parce que t'es fort un programmation qu'il faut prendre les autres gars pour des merde OK. Je te signal que ce forum est un forum d'aide donc il est beaucoup mieu d'expliquer les choses aux gens plutot que de leur demander de faire un copier coller. Si y en a que ca ne derange pas de faire cela moi j'aimeairs bien comprendre. De plus je te siganl que tout bon programmeur ce doit de mettre des commentaires dans ces codes afin d'etre comrpris par tous ok hors si je regarde bien dans ton code il y a tres peu de commentaires.


Enfin je te demanderai de bien lire mes remarque. J'ai bien compris que la procedure BrowseCallbackProc() cree une fenetre dans laquelle il affiche l'arbre de selection des fichiers ainsi que la fenetre ou s'affiche le chemin. Et lorsque l'on clic sur un dossier, il renvoie le chemin. Mais voici ce que je veux faire:


LPCITEMIDLIST pidlRoot : Adresse d'une structure ITEMIDLIST spécifiant la localisation du


répertoire de départ. Seul le répertoire de départ et ses sous-répertoires seront listés. Peut être


NULL, dans ce cas, le répertoire Root est pris par défaut.

Ceci vient de la documentation suivante :


Petites aides pour Visual C++ de


M. BERTHOMIER Eric


Version du 4 Octobre 2000

page 13

Voila comme je suis quelqu'un de poli, je te remercie de ton aide
0
julienbornet Messages postés 99 Date d'inscription jeudi 9 février 2006 Statut Membre Dernière intervention 2 février 2009
21 mars 2006 à 01:10
Merci Brunews pour ton aide et egalement le programme que tu m'as fournit. Ceci repond exactement a mes attente. Je n'ai pas encore eu le temps d'etudier le code de ta derneire source mais l'executable effectu exactement mon attente. De mon cote je teins egalement a m'excuser d'avoir mal interpreter ton intention. Il ne fait aucun que tu es la pour aider les gens.
De plus j'ai pris le temps de mieux etudier la premiere source que tu m'a fournit et peut etre serais je un jour confronter a ce probleme et le fait de l'avoir deja vu me sera tres utile.

Encore une fois merci pour ta source et merci de ton aide
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 mars 2006 à 11:00
OUPS un oubli que j'ai corrigé, reprends le zip stp.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Rejoignez-nous