Ayuda! Como cargar algo en una vista

Hola a todos! Veréis, estoy haciendo una aplicación, en la cual quiero tener en la página principal dos vistas, es decir, dividir la vista principal, quiero como un frame, que no lo pueda redimensionar. Lo qhe conseguido derivando una clase de splitter, no se si sera la mejor forma; Ahora bien, no se como rellenar las vistas creadas con lo que quiero; Lo primero quiero una cosa sencilla, crear el típico dialogo con dos botones aceptar y cancelar, y visualizarlo en la parte derecha. Pues bien:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext*
pContext)
{
if(!m_wndSplitter.CreateStatic(this,1,2))
return FALSE;
if(!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CProyectoView),
CSize(200), pContext) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CParteDerecha), CSize(),
pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
return TRUE;
}
Así es como diviso la pantalla, supongo que la clase CparteDerecha estará asociado al dialogo que quiero visualizar, pero esto me da fallos; Así que se cargara de otra forma, llevo muchos días y no soy capaz de avanzar; Si alguien me puede echar una mano, lo mismo hay ejemplos en la red, pero no encuentro nada; Si me podéis decir cualquier cosa, hacerlo, que lo mismo me sirve para ver la luz; Gracias a todos por lerme;

1 Respuesta

Respuesta
1
Vaya! Hacia bastante que no pasaba por aquí, y como veo que eres paisan@ (madrid) y como lo que preguntas, digamos que trabajo con ello día si y día también, pues he decidido salir de mi letargo o aborregamiento como experto y contestar tu pregunta.
Al tajo, que m enrollo como una perniasa, perdón, perniasa.
A ver, en principio la idea del splitter m parece bien, aunque no se muy bien hasta que punto quieres desarrollar tu aplicación, pero un splitter, como ya veras t deja muchas opciones abiertas (cosa que con mfs's no es muy común).
Hasta ahí bien. Ahora, otra cosa. Tienes tu clase CProyectoView que estará derivada de la clase de vista que sea ( cview, cformview, clistview, ctreeview, bla bla bla ) y una clase de vista CParteDerecha que contendrá botones. Ok, pues esta ultima, si contiene botones, deberá estar derivada de CFormView. Para este trabajo ya sabes que tienes el classwizard que es bastante cómodo, aunque siempre es recomendable saber que demonios esta haciendo esta herramienta. Dale a AddClass, ponle nombre y en la pestaña Clase Base selecciona CFormView. T pedirá un ID de dialogo, pásale el de los botones ese famoso. Y listo.
Briconsejo. Si tienes problemas en hacer todo esto, haz lo siguiente. Create un proyecto MFC Appwizard (uups, estoy presuponiendo que tienes el Microsoft Developer Studio... craso error por mi parte ), en no se que paso exactamente, el 4 o el 5, t pide la opción MFC Standard o Windows Explorer. Marca ésta última. Esto t creara 2 vistas separadas por un splitter, la de la izquierda tipo TreeView, y la derecha, de la clase que le indiques. Selecciona CFormView. Compila y ejecuta. Veras el resultado.
Bien. Ahora t anticipo un problema que ya m ocurrió a mi en su día, pero como yo soy así, ¿pa qué preguntar a nadie?. Tienes una aplicación con 2 vistas. Vale. ¿Y ahora q? Me encantaría meter un control árbol a la izquierda y que en la derecha se vea un formulario u otro en función de lo que tenga seleccionado en el árbol. ¿Parece lógico no? Pues las MFC's no lo permiten... ejem... a no ser que hagas algún trapicheo que otro.
Mirate esta página. Estoy seguro de que t sera muy útil y t dará alguna idea que otra.
http://www.codeproject.com/splitter/st_splitterwnd.asp
Y esto es todo. Como manejo bastante bien esto, pero francamente, m explico como el c... :P, es posible que no t haya algo claro. Pregunta sin miedo.
Hola, muchisimas gracias por contestar!!!!!!!!!!! la verdad es que ya lo tenia resuelto, bueno +/-, porque cada dia que pasa me surgen nuevos problemas; Veras era una tonteria, lo que me pasaba, es que el dialogo que creaba para mostrar en una vista, se me olvidaba poner ke fuera child en vez de pop-up que viene por defecto, y claro, me daba un error de ejecucion; Ahora esto liada con el tema de los hilos, que es arena de otro costal, y estoy mas perdida.... estoy haciendo un descargador, y claro mientras realiza la descarga quiero visualizar la tipica barra de progreso como en los descargadores de la red, y estoy muy perdida, pero bueno supongo ke rompiendome la cabeza lo sacare; Muchisimas gracias por contestar, creia que nadie me habia leido, jejeejejeje; Besos y cuidate; Ciao;
A mandar :))
Si necesitas algo más ya sabes.
[t respondo desde aki, pq al responder tu pregunta de multihilo me da un error]
Aunq supongo q ya habras encontrado la solucion antes de mi respuesta :S, como la ultima vez :DD, alla va.
Cuando trabajamos con hilos, hay que tener en cuenta los posibles problemas de concurrencia entre ellos. Ya sabes que para solucionar dichos problemas tenemos semáforos, eventos, secciones criticas, spin locks, etc, etc..
Por lo que creo, este es tu problema, pero lo que pasa es que no es visible. ¿Qué quiero decir?
Bien, en una aplicación mfc, el hilo principal es el encargado del tratamiento de los mensajes de la arquitectura documento-vista, diálogos que generes y demás. En tu caso hay un problema de concurrencia no visible a priori puesto parece que m_pPrincipal solo se accede desde el hilo trabajador ( HiloDescarga ), pero realmente no es así, porque el hilo principal es el encargado del tratamiento de todos los mensajes de ese ¿dialogo?.
Toma como costumbre no modificar la interfaz de usuario desde los hilos trabajadores, solo desde el principal.
Para solucionar el problema podrías hacer que la clase CDescargaArchivo se mandara un mensaje de fin de descarga a si mismo desde el hilo trabajador.
Este mensaje seria capturado por el hilo principal, llamaría a la función de tratamiento de ese mensaje (q tendrías q definir tu), q básicamente contendría las 2 lineas q escribes arriba
m_pPrincipal->m_sEvolucionDescarga += "\r\nGuardando en el fichero\r\n";
m_pPrincipal->UpdateData(false);
Para crear una función de tratamiento de un mensaje creado por el usuario, en esta página viene explicada una de las maneras, la más sencilla.
http://www.developerfusion.com/show/1713/2/
Pruébalo y m cuentas.
Salute.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas