Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Como mostrar una ventana de navegacion

Estas en el tema de Como mostrar una ventana de navegacion en el foro de C/C++ en Foros del Web. Hola, no se como hacer lo siguiente y a ver si alguien me puede ayudar. Estoy en una ventana de tipo dialogo y quiero que ...
  #1 (permalink)  
Antiguo 19/06/2006, 10:51
 
Fecha de Ingreso: mayo-2006
Mensajes: 24
Antigüedad: 18 años
Puntos: 0
Como mostrar una ventana de navegacion

Hola, no se como hacer lo siguiente y a ver si alguien me puede ayudar.
Estoy en una ventana de tipo dialogo y quiero que cuando pulse a una accion del menu me salga la tipica ventana de navegacion para poder escoger un archivo de cualquier sitio y me lo abra, igual que se haria con la funcion OnOpenDocument de la clase CDocument.
Alguien sabe como hacerlo??
estoy trabajando con el visual studio 2005. El lenguaje es en c++.
  #2 (permalink)  
Antiguo 19/06/2006, 12:27
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años
Puntos: 0
Puedes usar la clase CFileDialog de las MFC la cual encapsula el cuadro de dialogo comun que muestra la ventana de dialogo tipica de Windows donde puedes escoger uno o varios archivos y navegar en la estructura de directorios y cambiar de unidades de disco o red.

Para usarla simplemente declaras un objeto de esa clase (o creas una nueva clase que derive de esta, para que la adaptes a tu gusto), y al momento de crearla tienes que pasarle al constructor un valor booleano (bueno, en realidad puedes pasarle otros parametros mas, pero estos se inicializan por defecto con valores pre-establecidos). Una vez hecho esto, puedes establecer o modificar los valores de la estructura m_ofn para inicializar o cambiar los controles de la ventana de dialogo. La estructura m_ofn es de tipo OPENFILENAME, la cual puedes ver en la Plataforma SDK. Para que se muestre este dialogo solo tienes que llamar a la funcion miembro DoModal el cual regresa uno de dos valores: IDOK e IDCANCEL. Si regresa IDOK puedes usar las funciones miembro publicas de la clase CFileDialog para recuperar la informacion que dio el usuario en esta ventana de dialogo.

Para probarlo con el Visual C++ .NET 2003 cree un proyecto con las MFC de tipo dialogo y le agregue un solo boton. En el codigo asociado al boton cuando lo presionas puse este codigo
Código:
void CdialogoDlg::OnBnClickedButton1()
{
	// TODO: Agregue aquí su código de controlador de notificación de control
	CFileDialog cfiledialog(FALSE);
	cfiledialog.DoModal ();
}
y me mostro la ventana para buscar los archivos sin ningun problema
  #3 (permalink)  
Antiguo 20/06/2006, 10:44
 
Fecha de Ingreso: mayo-2006
Mensajes: 24
Antigüedad: 18 años
Puntos: 0
Hola de nuevo, muchas gracias por esta gran explicacion, sale a la primera.
Otra cuestion,como recoges ahora el nombre del fichero o ficheros seleccionados para poder trabajar con ellos??
  #4 (permalink)  
Antiguo 20/06/2006, 14:23
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años
Puntos: 0
Te paso a continuacion los datos y funciones miembro de la clase CFileDialog tal como viene en los discos del MSDN del Visual C++ .NET 2003:
Cita:
Datos:
m_ofn - La estructura OPENFILENAME. Proporciona acceso a los parametros de la ventana de dialogo.

Operaciones:
DoModal - Muestra la ventana de dialogo y permite que el usuario haga una seleccion
GetFileExt - Regresa la extension del archivo seleccionado
GetFileName - Regresa el nombre del archivo seleccionado
GetFileTitle - Regresa el titulo del archivo seleccionado
GetFolderPath - Recupera la trayectoria por defecto al abrir el dialogo
GetNextPathName - Regresa la trayectoria completa del siguiente archivo seleccionado
GetOFN - Recupera la estructura OPENFILENAME del objeto CFileDialog
GetPathName - Regresa la trayectoria completa del archivo seleccionado
GetReadOnlyPref - Regresa el estado de solo-lectura del archivo seleccionado
GetStartPosition - Regresa la posicion del primer elemento de la lista de archivos
HideControl - Esconde el control especificado en el dialogo
SetControlText - Establece el texto para el control especificado en el dialogo
SetDefExt - Establece la extension por defecto para los archivos en el dialogo
SetTemplate - Establece el "template" (no supe como traducirlo) del dialogo para el objeto CFileDialog

Funciones que puedes redefinir (Overridables, en ingles. O sea, que si derivas una clase de CFileDialog, ahi las puedes cambiar):
OnFileNameChange - Llamada para manejar el mensaje WM_NOTIFY CDN_SELCHANGE
OnFileNameOK - Llamada para validar el nombre de archivo proporcionado en el dialogo
OnFolderChange - Llamada para manejar el mensaje WM_NOTIFY CDN_FOLDERCHANGE
OnInitDone - Llamada para manejar el mensaje WM_NOTIFY CDN_INITDONE
OnLBSelChangedNotify - Llamada cuando cambia la seleccion de la caja de lista
OnShareViolation - Llamada cuando ocurre una violacion de comparticion
OnTypeChange - Llamada para manejar el mensaje WM_NOTIFY CDN_TYPECHANGE
Modificando la funcion que te puse anteriormente:
Código:
void CdialogoDlg::OnBnClickedButton1()
{
	// TODO: Agregue aquí su código de controlador de notificación de control
	CFileDialog cfiledialog(TRUE);
	if (cfiledialog.DoModal () == IDOK)
		MessageBox (cfiledialog.GetFileName (), "Archivo seleccionado");
}
Al presionar el boton del dialogo que cree en el proyecto me muestra la ventana de dialogo para escoger un archivo. Si escojo uno y presiono el boton OPEN, se muestra una ventana de mensajes con el nombre del archivo seleccionado.
Hacer multiples selecciones de archivos involucra establecer una bandera en uno de los campos de la estructura OPENFILENAME y darle un buffer a donde se van a almacenar los archivos seleccionados en otro de ellos, pero esto ya te lo dejo como tarea para que investigues por tu cuenta como hacerlo.
  #5 (permalink)  
Antiguo 25/06/2006, 11:55
 
Fecha de Ingreso: mayo-2006
Mensajes: 24
Antigüedad: 18 años
Puntos: 0
Que quieres decir con lo de bandera??
Supongo que cuando seleccionas varios ficheros y le das al open la ventana CFileDialog lo guardara en un buffer o un iterador o algo asi no???
Entonces tendria que hacer un bucle para ir sacando uno x uno el nombre del fichero y abrir un dialogo no??
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:59.