Definition de LPCITEMIDLIST

[Résolu]
Signaler
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

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
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Faut aussi libérer la mémoire de Item.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

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
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Comment liberer le memoire de Item
merci
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Faut il que je rajoute la ligne suivante juste avant le return true?



if(SUCCEEDED(SHGetMalloc(&pMalloc))) {pMalloc->Free(lpItemLst); pMalloc->Release();}
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

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
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
OUPS un oubli que j'ai corrigé, reprends le zip stp.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++