Abrir una ventana de dialogo para seleccionar un directorio

31/05/2004 - 14:32 por sandra_soria81 | Informe spam
A ver si me podeis ayudar con el problemilla que tengo. Con el codigo de
abajo, al pulsar un boton me sale la tipica ventana de windows para abrir
un archivo, yo lo que quiero es examinar el dico duro para poder
seleccionar una ruta; Me lo hace perfecto siempre y cuando sea un archivo,
pero no me deja seleccionar un directorio; Deseo seleccionar un
directorio, para posteriormente guardar cosas en el; Se podria hacer????

void CDescargarArchivo::OnFileOpen()
{
CFileDialog DlgAbrir(true); // llama al constructor

// Definir los pares descripción|filtro
DlgAbrir.m_ofn.lpstrFilter = "Ficheros de proyecto \
(*.dsp)\0*.dsp\0Imágenes (*.bmp;*.ico)\0*.bmp;*.ico\0Todos los \
ficheros (*.*)\0*.*\0";

if ( DlgAbrir.DoModal() == IDOK )
{
// Visualizar el nombre del fichero en la caja de texto
m_sGuardarComo = DlgAbrir.GetPathName();
UpdateData( false );
}
}

Es decir, yo lo que quiero es en una ventana visualizar el disco duro para
poder selecionar un directorio, y obtener la ruta del mismo, no
seleccionar archivos. Si sabeis como guiarme o como hacerlo de otra manera
me servira de mucha ayuda; Gracias por leerme;

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral [MVP]
31/05/2004 - 16:37 | Informe spam
Puedes usar la función SHBrowseForFolder para eso.

Rodrigo Corral González [MVP]

microsoft.public.es.vc FAQ
http://vcfaq.europe.webmatrixhosting.net
Respuesta Responder a este mensaje
#2 sandra_soria81
31/05/2004 - 18:22 | Informe spam
Muchas gracias por ayudarme; En mi libro de Ceballos no viene nada de esa
funcion, he buscado en internet y he conseguido esto:

void CDescargarArchivo::OnFileOpen()
{
BROWSEINFO bi;
CString Folder;
CString FullPath;
char Title[] = "Selecciona el Directorio Destino";

// Initialization code for the BROWSEINFO struct:
bi.hwndOwner = this->m_hWnd;
bi.lpszTitle = Title;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.pidlRoot = NULL;
bi.lpfn = NULL;

if (SHGetPathFromIDList(::SHBrowseForFolder(&bi), FullPath))
{

m_sGuardarComo = FullPath; // Here we assume the m_Dir is a variable
associated with an edit box
UpdateData(FALSE); // Put data into edit boxes (or do whatever you want
to do with it)
}
}

Lo que pasa es que me da error en SHGetPathfromIDList, y si quito esa
funcion, y solo dejo SHBrowseForFolder se me abre una ventanita con el
disco duro perfecto pero lanza una excepcion cuando doy a aceptar;
Respuesta Responder a este mensaje
#3 sandra_soria81
01/06/2004 - 11:11 | Informe spam
Ya esta solucionado:

void CDescargarArchivo::OnFileOpen()
{
typedef char StringType[MAX_PATH];
BROWSEINFO bi;
StringType Folder;
StringType FullPath;
char Title[] = "Selecciona el Directorio Destino";

// Initialization code for the BROWSEINFO struct:
bi.hwndOwner = this->m_hWnd;
bi.pszDisplayName = Folder;
bi.lpszTitle = Title;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.pidlRoot = NULL;
bi.lpfn = NULL;

if (SHGetPathFromIDList(::SHBrowseForFolder(&bi), FullPath))
{
m_sGuardarComo = FullPath; // Here we assume the m_Dir is a variable
associated with an edit box
UpdateData(FALSE); // Put data into edit boxes (or do whatever you
want to do with it)
}

}


Gracias a todos;
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida