C/Visual C - nueva ventana visual c++

 
Vista:

nueva ventana visual c++

Publicado por juanma (4 intervenciones) el 20/01/2007 16:53:00
Estoy realizando una aplicacion con imagenes y me gustaria que cuando pulso archivo-abrir se cargase la nueva imagen en una ventaba nueva y no en la que ya tengo abierta.

Lo estoy intentando hacer con OnFileOpen desde la vista (View) pero no lo consigo.

Espero que alguien me pueda resolver el problema.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:nueva ventana visual c++

Publicado por Nelek (816 intervenciones) el 22/01/2007 07:53:47
Hay varias maneras de hacerlo, tu lo que quieres es seguir trabajando con el mismo documento y abrir unicamente una nueva vista? o quieres que la nueva vista tenga tambien su propio documento?

Si quieres un solo doc y varias vistas... es mas complicadillo.

Si quieres un doc por cada vista...

Create por ahi alguna variable global que te distinga si el nuevo doc/vista viene por una orden o por otra y otra que te de permiso para hacer una cosa u otra. Sobrecarga tu "OnFileOpen" y llama dentro al "OnFileNew. Luego en el "OnFileNew" compruebas la primera variable para saber si vienes creando un nuevo fichero o abriendolo. Modificas la segunda variable y vuelves a llamar "OnFileOpen" para que te abra la imagen en la nueva vista.

Es decir

bool modo_nuevo = false;
bool nuevo_abierto = false;

OnFileNew ()
{
//codigode apertura normal

if (modo_nuevo == true)
OnFileOpen ();
}

OnFileOpen ()
{
if (nuevo_abierto == false)
onFileNew ();
else
//resto del codigo
}

Supongo que debe de haber metodos mas elegantes, pero a mi este me funciona. Trabajo con MDI pero haciendolo como un SDI, a mi me interesan distintas vistas pero el mismo Doc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:nueva ventana visual c++

Publicado por juanma (4 intervenciones) el 22/01/2007 14:16:06
En primer lugar gracias por contestarme... Nelek.

La verdad es que tiene mucho sentido lo que dices con lo que me sucede en la aplicación, porque le doy a archivo-abrir y solo me sale una ventana vacia, sin cargarme la imagen en ella [Porque llamará a OnFileNew]. Entonces tengo que darle otra vez a archivo-abrir para que me carge la imagen dentro de la ventana hija que se ha creado anteriormente.

El OnFileOpen() lo he creado en la vista y es ahí donde cargo la imagen que cojo del cuadro de dialogo abrir.

void CTDIView::OnFileOpen()
{
// TODO: Add your command handler code here

CTDIDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CMainFrame *pFrame = (CMainFrame *)(AfxGetApp()->m_pMainWnd);
CFileDialog ldFile(TRUE);

// Show the File Open dialog and capture the result
if (ldFile.DoModal() == IDOK)
{
// Get the file name selected
pDoc->bitmap = ldFile.GetFileName();
pDoc->imagen.Cargar(pDoc->bitmap);
pDoc->paso=0;
CREATESTRUCT cs;
pFrame->PreCreateWindow(cs);

// Update the dialog
UpdateData(FALSE);
pDoc->SetModifiedFlag();
Invalidate();
}
pFrame->m_paneString="Zona de aplicación";

}

El problema es que no se ni donde editar el OnFileNew() ni como es el código de apertura normal. Supongo que será por eso por lo que cada vez que intento abrir una nueva imagen me machaca las anteriores sobre la misma ventana y no me crea una nueva.

Con respecto a lo que me comentabas de varios documentos, varias vistas, yo lo que hago es crearme una clase imagen con todos sus métodos. Esta clase se la paso al documento, desde hay la modifico y la muestro en la vista. Pero me gustaria que cada una de las modificaciones, que realizo mediante un botón de la barra de herramientas, se mostrase en otra ventana, para ir viendo los cambios. No se si me estoy explicando bien.

En fin, yo creo que estoy trabajando con un solo documento pero lo que quiero es que la vista se muestre en diferentes ventanas, no se si estoy confundido.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:nueva ventana visual c++

Publicado por Nelek (816 intervenciones) el 22/01/2007 16:28:26
Hola de nuevo,

entonces es lo que me suponia, un solo documento, varias vistas.

Consultate el ejemplo de MSDN que se llama CHKBOOK

Es el que yo he utilizado para poder conseguirlo.

Intentalo tu primero y si no te aclaras ya intentare echarte una mano hasta donde yo pueda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:nueva ventana visual c++

Publicado por juanma (4 intervenciones) el 22/01/2007 20:10:44
Hola, ya estoy aqui otra vez,

he estado mirando el ejemplo de CHKBOOK en la página

http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/vcsample/html/_sample_mfc_chkbook.asp

y no me aclaro mucho la verdad. No se ni como ni de donde se genera y ejecuta el ejemplo.

Estoy buscando la forma de implementar OnFileNew(), ya que creo que por ahí lograré que al menos cuando pulse archivo-abrir cargue la imagen en la ventana y no tenga que darle otra vez.

El tema de que cuando pulse un boton de la barra de herramientas se genere una nueva ventana para ver el cambio que se produce en la imagen lo dejare por el momento. Voy a centrarme en poder abrir una imagen de una sola vez, y si abro otra imagen distinta desde archivo-abrir que la pinte en otra ventana.

Como te comente antes tengo definida una CImagen con sus métodos. Y desde el documento creo un objeto imagen y lo manipulo.

class CTDIDoc : public CDocument
{
// Attributes
public:
CImagen imagen; //objeto de la clase imagen
........

¿Creés que me hará falta definir un objeto imagen para cada una de las imagenes que quiero abri, si no quiero cerrar antes las anteriores?
No tiene mucho sentido verdad???

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:nueva ventana visual c++

Publicado por Nelek (816 intervenciones) el 23/01/2007 14:22:52
La cosa esta en que si quieres tener las diferentes imagenes abiertas, vas a tener que crear un CImage para cada una de ellas. La cosa está en que te puedes crear una clase derivada de CObject, donde metas todo lo de una de tus imagenes. Luego creas una CObList con las diferentes imagenes y las relacionas con la CViewList de cada una de las vistas.

En cuanto al ejemplo CHKBOOK, te interesa mirar en el fichero chkbook.h y .cpp (los derivados del CWinApp) lo que viene acerca de la CMDIDocTemplate en el InitInstance (). Luego tambie te interesara lo que aparece en la clase derivada de CMainFrame la funcion CreateorActivateFrame (...).

La cosa esta en primero derivar tu CView principal de la clase que quieras en el asistente de nuevo proyecto. Luego tienes que crear la segunda clase derivada de la CView (o en su defecto crearte otra plantilla usando la misma View), modificar la descripcion de la segunda en la "String-Table" para evitar que se ralle con distintos tipos de fichero.

Con todo ello puedes crear distintas vistas del mismo Documento, ya sea para trabajar con una imagen entera nueva, o para mostrar los cambios que estas introduciendo en la que modificas. La cosa esta en crearte una lista de objetos CImagen que este sincronizada en sitios con la lista de las CView miembros del CDocument.

Si quieres te mandare un ejemplo que tengo bastante basico, donde estuve investigando yo para poder abrir nuevas CSCrollView y saber en cual de ellas hago un smple Doble Click.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar