C/Visual C - Donde esta la funcion...?

 
Vista:

Donde esta la funcion...?

Publicado por Nelek (816 intervenciones) el 18/07/2006 12:45:12
Hola,

Alguien sabe donde se encuentra el el metodo relacionado al mensaje que se ejecuta para responder al comando ID_FILE_CLOSE (Archivo - Cerrar) del menu standard de windows dentro del Visual C++? Lo he estado buscando y no lo he visto.

P.ej. Cuando se aprieta a la opcion de menu "Archivo - Nuevo" el MyApp.cpp tiene en su codigo: ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
Es decir, que el metodo de abrir un mensaje nuevo esta ya automatizado y se "dispara" al recibir la orden "CWinApp::OnFileNew".

Ya he mirado y el WinApp solo tiene la orden CWinApp::CloseAllDocuments, y esa no es la que busco.

Tambien he intentado el comando CDocument::CloseDocument, pero eso me lo cierra directamente y yo lo que quiero es disparar el mensaje que se da cuando se clicka en "Archivo - Cerrar" (no salir) o en la X de la ventana activa, es decir, que se compruebe si hay modificaciones, que se pregunte si se quieren guardar, etc. antes de cerrar el documento activo.

Alguien sabe por donde podria esconderse el disparador de ese proceso??
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

Que alguien me conteste, por favor

Publicado por Nelek (816 intervenciones) el 18/07/2006 17:04:40
Pues eso, por favor, contestadme :(
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:Donde esta la funcion...?

Publicado por fernando.gomez (1603 intervenciones) el 18/07/2006 19:55:15
Es que no hay un comando en particular. Para procesar ID_FILE_CLOSE, tienes que manejarlo con ON_COMMAND o con ON_UPDATE_COMMAND_UI. CDocument tiene un miembro, OnFileClose. Aquí hay un artículo al respecto que quizás te sirva.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfcnotes_tn022.asp
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:Donde esta la funcion...?

Publicado por Nelek (816 intervenciones) el 19/07/2006 10:07:11
Muchas gracias, ahora mismo voy a echarle un vistazo.
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

@Fernando: es lo que buscaba pero me da fallo

Publicado por Nelek (816 intervenciones) el 19/07/2006 11:56:52
Gracias pro el link fernando, es lo que andaba buscando, pero me da un problema. Te cuento:

yo me declaro una variable en el fichero de la aplicacion (FPS.cpp) para llevar la cuenta de los documentos abiertos y luego en el evento CFPSDoc::OnNewDocument, evalueo la variable usando el "extern" y si hay mas de 1 documento entonces le digo que use el metodo de cerrar como lo pone en la pagina esa.

extern int nDocs;
if (nDocs != 0)
{
nDocs = 0;
CFPSDoc::OnCloseDocument ();
}
else
{...}

El problema es que recibo un fallo de (en aleman): Nicht abgefangene Ausnahme in FPS.exe (KERNEL32.DLL): 0xC0000005: Access Violation.

Que traducido podria ser: Excepcion no soportada en FPS.exe...

Y cuando le doy me remite a:

BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
ASSERT(this != NULL);
// it better be in valid memory, at least for CObject size
ASSERT(AfxIsValidAddress(this, sizeof(CObject)));

// simple SI case
CRuntimeClass* pClassThis = GetRuntimeClass();
return pClassThis->IsDerivedFrom(pClass);
}

Creo que es porque intento cerrar el documento que se esta creando en ese momento en lugar de cerrar el anterior. Voy a probar a ver si asignando un puntero al documento una vez se crea (en el evento CFPSView::OnInitialUpdate), luego puedo cerrar ese al abrir el siguiente.

Si me funciona lo avisare, pero si no digo nada mas... podrias orientarme un poco?

Gracias
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

Si que era eso

Publicado por Nelek (816 intervenciones) el 19/07/2006 12:37:02
Si que era eso. Tomando un puntero al doc en el InitialUpdate y luego haciendo como habia pensado me funciona.

La unica pega es cuando abro un fichero ya guardado, que me entran en conflicto el que ya estaba abierto (si es que hay uno antes) y el nuevo, pero no creo que me cueste mucho solucionarlo.
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