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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.