Liste de recherche de répertoire

Signaler
Messages postés
6
Date d'inscription
jeudi 3 juillet 2003
Statut
Membre
Dernière intervention
18 juillet 2003
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
je cherche un moyen de faire un choix de répertoire avec un controle qui affiche de déroulement des répertoire.
Il faudrait que le déroulement de répertoire soit affiché de maniere permanante la boite de dialogue.
( du style de DirListBox en VB )

3 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
SHBrowseForFolder() et regler les champs de la structure BROWSEINFO.
BruNews, ciao...
Messages postés
6
Date d'inscription
jeudi 3 juillet 2003
Statut
Membre
Dernière intervention
18 juillet 2003

Merci,

J'ai bien vu cette fonction et l'ai mis en application, mais le pb, c'est que le répetoire par défaut est tjs le bureau.
Et je ne suis pas arrivé à configurer ce répertoire par défaut dans la structure BROWSEINFO.

Si tu peux me donner ton aide, ce sera avec plaisir.

Sinon, je pefererais encore mieux si l'arborescence restait affiché dans la fenetre meme si on fait autre chose !

Si tu peux repondre à ces 2 questions ce sera formidable.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM dwData)
{
switch(uMsg) {
case BFFM_INITIALIZED:
{
SetWindowLong(hwnd, GWL_EXSTYLE, 0x10101);
RECT rc;
GetClientRect(hwnd, &rc);
HWND hLabel = GetDlgItem(hwnd, 0x3742); // titre
if(IsWindow(hLabel)) { // Check if it is a valid window
SetWindowLong(hLabel, GWL_STYLE, 0x50020001);
SetWindowPos(hLabel, NULL, 10, 10, rc.right - 20, 20, SWP_DRAWFRAME);
}
hLabel = GetDlgItem(hwnd, 0x3743); // Add a 3D border to the status text
if(IsWindow(hLabel)) { // Check if it is a valid window
SetWindowLong(hLabel, GWL_EXSTYLE, 0x20004);
SetWindowLong(hLabel, GWL_STYLE, 0x50028201);
SetWindowPos(hLabel, NULL, 5, 40, rc.right - 10, 30, SWP_DRAWFRAME);
}
SendMessage(hwnd, BFFM_SETSELECTION, 1, dwData);
}
break;
case BFFM_SELCHANGED:
{
TCHAR szText[MAX_PATH] = {0};
SHGetPathFromIDList((LPITEMIDLIST) lParam, szText);
SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (long) szText);
}
break;
}
return 0;
}

int dlgSelectDir(HWND hOwner, const char* pszTitle, char* pszDirSel)
{ // #include <Shlobj.h>
char szTmp[MAX_PATH];
BROWSEINFO bi;
int len = 0;
LPMALLOC pMalloc;
memset(&bi,0,sizeof(BROWSEINFO));
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN |
BIF_VALIDATE | BIF_STATUSTEXT; bi.hwndOwner hOwner; bi.lpszTitle pszTitle;
bi.lParam = (long) pszDirSel; bi.lpfn BrowseCallbackProc; bi.pszDisplayName szTmp;
LPITEMIDLIST lpItemLst = SHBrowseForFolder(&bi);
if(lpItemLst == NULL) return 0;
if(SHGetPathFromIDList(lpItemLst, szTmp)) {
strcpy(pszDirSel, szTmp); len = strlen(pszDirSel);
if(pszDirSel[len - 1] != '\\') {pszDirSel[len++] = '\\'; pszDirSel[len] = 0;}
}
if(SUCCEEDED(SHGetMalloc(&pMalloc))) {pMalloc->Free(lpItemLst); pMalloc->Release();}
return len;
}

pszDirSel fera office de directory a l'ouverture et de valeur en retour.
BruNews, ciao...