C/Visual C - Problemas abriendo nuevo CDoc durante la ejecucion

 
Vista:

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)
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

Apanyao

Publicado por Nelek (816 intervenciones) el 27/03/2007 15:08:45
Hola,

no he logrado hacer lo que queria, pero me lo he solucionado haciendo un mensaje de fallo. Es decir,

si cuando el usuario le da a la opcion de menu que corresponde, en lugar de cerrar el activo (salvado si necesario) y abrir automaticamente otro vacio... compruebo si el mio esta vacio con

if (pDoc->m_cmlMyDataList1.IsEmpty () || pDoc... || ...DataList3.IsEmpty ())
{
MessageBox ("Esta funcion solo puede ser llamadad desde un documento vacio/recien creado", "Informacion", MB_OK);
return;
}

y arreando
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