Problemas abriendo nuevo CDoc durante la ejecucion
Publicado por Nelek (816 intervenciones) el 27/03/2007 13:11:38
Hola,
En mi proyecto me gustaria poder cerrar el documento activo y abrir uno nuevo en un punto determinado, pero no lo consigo. Por ahora he hecho las siguiente pruebas:
----
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->IsModified ())
{
int nAnswer = MessageBox ("El proyecto actual será borrado. Continuar?", "Confirmación", MB_YESNO);
if (nAnswer == IDNO)
return;
}
//Aqui es donde he hecho las diferentes pruebas
--------------
//Prueba 1
CDocument::OnNewDocument();
-------
Aqui me da el error C2352: 'CDocument::OnNewDocument' : Llamada no apropiada a una funcion miembro no estatica.
Por otro lado he intentado:
-------
//Prueba 2
extern CMyApp theApp;
theApp.OnFileNew ();
-------
Con ello recibo el error de compilacion: error C2248: "OnFileNew" : Ningun acceso a elementos protegidos cuya declaracion este en la clase "CWinApp"
Tambien he intentado:
-------
//Prueba 3
POSITION pos = pDoc->GetFirstViewPosition ();
CView* pView = pDoc->GetNextView (pos);
CFrameWnd* pFrame = pView->GetParentFrame ();
pFrame->DestroyWindow ();
pNewFrame = (CChildFrame*)(pTemplate->CreateNewFrame(pDoc, pNewFrame));
if (pNewFrame == NULL)
return;
pTemplate->InitialUpdateFrame(pNewFrame, pDoc);
return;
---------
Donde recibo un assertion porque el pDoc esta apuntado a vacio y entonces no puede crear el nuevo marco
y al final he conseguido hacer algo que me apanya con:
---------
//Prueba 4
pDoc->m_cmlListaDatos1.RemoveAll ();
pDoc->m_cmlListaDatos2.RemoveAll ();
pDoc->m_cmlListaDatos3.RemoveAll ();
pDoc->UpdateAllViews (NULL);
--------
Y esto me hace el apanyo temporal de borrar todo y cargar los datos que quiero del fichero que abro a continuacion, pero cuando quiero guardar las cosas... va a guardarlo en el primero documento que abri, con el consecuente problema de sobreescribir algo que no se debe tocar (teoricamente ese documento tendria que cerrarse)
Como puedo lograr cerrrar un documento y disparar el mensaje OnFileNew () de toda la vida cuando le clickas al boton de la barra de herramientas? (Dicho boton no lo he sobrecargado en ningun sitio, su funcion es la que viene por defecto)
En mi proyecto me gustaria poder cerrar el documento activo y abrir uno nuevo en un punto determinado, pero no lo consigo. Por ahora he hecho las siguiente pruebas:
----
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->IsModified ())
{
int nAnswer = MessageBox ("El proyecto actual será borrado. Continuar?", "Confirmación", MB_YESNO);
if (nAnswer == IDNO)
return;
}
//Aqui es donde he hecho las diferentes pruebas
--------------
//Prueba 1
CDocument::OnNewDocument();
-------
Aqui me da el error C2352: 'CDocument::OnNewDocument' : Llamada no apropiada a una funcion miembro no estatica.
Por otro lado he intentado:
-------
//Prueba 2
extern CMyApp theApp;
theApp.OnFileNew ();
-------
Con ello recibo el error de compilacion: error C2248: "OnFileNew" : Ningun acceso a elementos protegidos cuya declaracion este en la clase "CWinApp"
Tambien he intentado:
-------
//Prueba 3
POSITION pos = pDoc->GetFirstViewPosition ();
CView* pView = pDoc->GetNextView (pos);
CFrameWnd* pFrame = pView->GetParentFrame ();
pFrame->DestroyWindow ();
pNewFrame = (CChildFrame*)(pTemplate->CreateNewFrame(pDoc, pNewFrame));
if (pNewFrame == NULL)
return;
pTemplate->InitialUpdateFrame(pNewFrame, pDoc);
return;
---------
Donde recibo un assertion porque el pDoc esta apuntado a vacio y entonces no puede crear el nuevo marco
y al final he conseguido hacer algo que me apanya con:
---------
//Prueba 4
pDoc->m_cmlListaDatos1.RemoveAll ();
pDoc->m_cmlListaDatos2.RemoveAll ();
pDoc->m_cmlListaDatos3.RemoveAll ();
pDoc->UpdateAllViews (NULL);
--------
Y esto me hace el apanyo temporal de borrar todo y cargar los datos que quiero del fichero que abro a continuacion, pero cuando quiero guardar las cosas... va a guardarlo en el primero documento que abri, con el consecuente problema de sobreescribir algo que no se debe tocar (teoricamente ese documento tendria que cerrarse)
Como puedo lograr cerrrar un documento y disparar el mensaje OnFileNew () de toda la vida cuando le clickas al boton de la barra de herramientas? (Dicho boton no lo he sobrecargado en ningun sitio, su funcion es la que viene por defecto)
Valora esta pregunta


0