PDA

Ver la Versión Completa : cuadro de dialogo


kenychy
20-08-2010, 15:56:28
hello friends, necesito saber como crear , un cuadro de dialogo para seleccionar una carpeta , yo tengo entendido que se hace mediante la estrucctura BROWSEINFO y usando la funcion SHBrowseForFolder, ya se como hacerlo en delphi, pero necesito saber como hacerlo en c++.

escafandra
20-08-2010, 20:29:22
En C++ Builder:


#include <FileCtrl.hpp>

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String Carpeta;
SelectDirectory("Seleccione carpeta", "", Carpeta);
}


Saludos.

escafandra
22-08-2010, 20:35:54
Si lo deseas sólo con la API (SHBrowseForFolder) y válido para compiladores diferentes al Builder, podemos hacer una implementación sencilla de dicha función:


BOOL SelectDirectory(HWND hWnd, const PCHAR Caption, PCHAR Directory)
{
BROWSEINFO BrowseInfo;
LPITEMIDLIST ItemIDList;
LPMALLOC ShellMalloc;

ZeroMemory(&BrowseInfo, sizeof(BrowseInfo));
if(SHGetMalloc(&ShellMalloc) == S_OK && ShellMalloc){
BrowseInfo.hwndOwner = hWnd;
BrowseInfo.pidlRoot = 0;
BrowseInfo.pszDisplayName = Directory;
BrowseInfo.lpszTitle = Caption;
BrowseInfo.ulFlags = BIF_RETURNONLYFSDIRS;
ItemIDList = SHBrowseForFolder(&BrowseInfo);
if(ItemIDList){
SHGetPathFromIDList(ItemIDList, Directory);
ShellMalloc->Free(ItemIDList);
}
}
return ItemIDList!=0;
}


Como ejemplo:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Asegúrate que la variable Carpeta tiene un tamaño igual o mayor que MAX_PATH
char Carpeta[MAX_PATH];
SelectDirectory(Handle, "Seleccione carpeta", Carpeta);
}

kenychy
23-08-2010, 16:24:10
gracias men