Clase CDocument
Proporciona la funcionalidad básica para las clases definidas por el usuario del documento.
Sintaxis
class CDocument : public CCmdTarget
Miembros
Constructores públicos
Nombre | Descripción |
---|---|
CDocument::CDocument |
Construye un objeto CDocument . |
Métodos públicos
Nombre | Descripción |
---|---|
CDocument::AddView |
Adjunta una vista al documento. |
CDocument::BeginReadChunks |
Inicializa la lectura de fragmentos. |
CDocument::CanCloseFrame |
Invalidable avanzado; se llama antes de cerrar una ventana de marco que ve este documento. |
CDocument::ClearChunkList |
Borra la lista de fragmentos. |
CDocument::ClearPathName |
Borra la ruta del objeto documento. |
CDocument::DeleteContents |
Se llama para realizar la limpieza del documento. |
CDocument::FindChunk |
Busca un fragmento con el GUID especificado. |
CDocument::GetAdapter |
Devuelve un puntero a la interfaz de implementación de objetos IDocument . |
CDocument::GetDocTemplate |
Devuelve un puntero a la plantilla de documento que describe el tipo del documento. |
CDocument::GetFile |
Devuelve un puntero al objeto deseado CFile . |
CDocument::GetFirstViewPosition |
Devuelve la posición de la primera en la lista de vistas; se usa para comenzar la iteración. |
CDocument::GetNextView |
Recorre en iteración la lista de vistas asociadas al documento. |
CDocument::GetPathName |
Devuelve la ruta de acceso del archivo de datos del documento. |
CDocument::GetThumbnail |
Se llama a para crear un mapa de bits que usará el proveedor de miniaturas para mostrar la miniatura. |
CDocument::GetTitle |
Devuelve el título del documento. |
CDocument::InitializeSearchContent |
Se llama para inicializar el contenido de búsqueda para el controlador de búsqueda. |
CDocument::IsModified |
Indica si el documento ha sido modificado desde que se guardó por última vez. |
CDocument::IsSearchAndOrganizeHandler |
Indica si esta instancia de CDocument objeto se creó para el controlador de búsqueda y organización. |
CDocument::LoadDocumentFromStream |
Se llama para cargar datos del documento desde la secuencia. |
CDocument::OnBeforeRichPreviewFontChanged |
Se llama antes de cambiar la fuente Rich Preview. |
CDocument::OnChangedViewList |
Se llama después de agregar o quitar una vista en un documento. |
CDocument::OnCloseDocument |
Se llama para cerrar el documento. |
CDocument::OnCreatePreviewFrame |
Lo llama el marco cuando necesita crear un marco de vista previa para La versión preliminar enriquecida. |
CDocument::OnDocumentEvent |
Lo llama el marco en respuesta a un evento de documento. |
CDocument::OnDrawThumbnail |
Invalide este método en una clase derivada para dibujar contenido de miniatura. |
CDocument::OnLoadDocumentFromStream |
Lo llama el marco cuando necesita cargar los datos del documento desde el flujo. |
CDocument::OnNewDocument |
Se llama para crear un nuevo documento. |
CDocument::OnOpenDocument |
Se llama para abrir un documento existente. |
CDocument::OnPreviewHandlerQueryFocus |
Dirige el controlador de vista previa para que devuelva desde la llamada HWND a la función GetFocus . |
CDocument::OnPreviewHandlerTranslateAccelerator |
Dirige el controlador de vista previa para controlar una pulsación de tecla pasada desde la bomba de mensajes del proceso en el que se ejecuta el controlador de vista previa. |
CDocument::OnRichPreviewBackColorChanged |
Se llama cuando ha cambiado el color de fondo de la vista previa enriquecida. |
CDocument::OnRichPreviewFontChanged |
Se llama cuando ha cambiado la fuente Rich Preview. |
CDocument::OnRichPreviewSiteChanged |
Se llama cuando el sitio de vista previa enriquecida ha cambiado. |
CDocument::OnRichPreviewTextColorChanged |
Se llama cuando ha cambiado el color del texto Rich Preview. |
CDocument::OnSaveDocument |
Se llama para guardar el documento en el disco. |
CDocument::OnUnloadHandler |
Lo llama el marco cuando se descarga el controlador de vista previa. |
CDocument::PreCloseFrame |
Se llama antes de que se cierre la ventana de marco. |
CDocument::ReadNextChunkValue |
Lee el siguiente valor de fragmento. |
CDocument::ReleaseFile |
Libera un archivo para que esté disponible para su uso por otras aplicaciones. |
CDocument::RemoveChunk |
Quita un fragmento con especificado GUID . |
CDocument::RemoveView |
Desasocia una vista del documento. |
CDocument::ReportSaveLoadException |
Invalidable avanzado; se llama cuando no se puede completar una operación abierta o guardada debido a una excepción. |
CDocument::SaveModified |
Invalidable avanzado; se llama para preguntar al usuario si se debe guardar el documento. |
CDocument::SetChunkValue |
Establece un valor de fragmento. |
CDocument::SetModifiedFlag |
Establece una marca que indica que ha modificado el documento desde que se guardó por última vez. |
CDocument::SetPathName |
Establece la ruta de acceso del archivo de datos utilizado por el documento. |
CDocument::SetTitle |
Establece el título del documento. |
CDocument::UpdateAllViews |
Notifica a todas las vistas que se han modificado los documentos. |
Métodos protegidos
Nombre | Descripción |
---|---|
CDocument::OnFileSendMail |
Envía un mensaje de correo electrónico con el documento adjunto. |
CDocument::OnUpdateFileSendMail |
Habilita el comando Enviar correo si la compatibilidad con el correo está presente. |
Miembros de datos públicos
Nombre | Descripción |
---|---|
CDocument::m_bGetThumbnailMode |
Especifica el objeto CDocument creado por dllhost para miniaturas. Debe comprobarse en CView::OnDraw . |
CDocument::m_bPreviewHandlerMode |
Especifica que CDocument el objeto se creó mediante prevhost para Rich Preview . Debe comprobarse en CView::OnDraw . |
CDocument::m_bSearchMode |
Especifica que el indexador u otra aplicación de búsqueda creó el CDocument objeto. |
CDocument::m_clrRichPreviewBackColor |
Especifica el color de fondo de la ventana Vista previa enriquecida. El host establece este color. |
CDocument::m_clrRichPreviewTextColor |
Especifica el color de primer plano de la ventana Vista previa enriquecida. El host establece este color. |
CDocument::m_lfRichPreviewFont |
Especifica la fuente de texto para la ventana Vista previa enriquecida. El host establece esta información de fuente. |
Comentarios
Un documento representa la unidad de datos que el usuario suele abrir con el comando File Open y guardar con el comando File Save.
CDocument
admite operaciones estándar, como crear un documento, cargarlo y guardarlo. El marco manipula documentos mediante la interfaz definida por CDocument
.
Una aplicación puede admitir más de un tipo de documento; por ejemplo, una aplicación podría admitir hojas de cálculo y documentos de texto. Cada tipo de documento tiene una plantilla de documento asociada; la plantilla de documento especifica qué recursos (por ejemplo, menú, icono o tabla de aceleradores) se usan para ese tipo de documento. Cada documento contiene un puntero a su objeto asociado CDocTemplate
.
Los usuarios interactúan con un documento a través de los CView
objetos asociados a él. Una vista representa una imagen del documento en una ventana de marco e interpreta la entrada del usuario como operaciones en el documento. Un documento puede tener varias vistas asociadas. Cuando el usuario abre una ventana en un documento, el marco crea una vista y la adjunta al documento. La plantilla de documento especifica qué tipo de vista y ventana de marco se usan para mostrar cada tipo de documento.
Los documentos forman parte del enrutamiento de comandos estándar del marco y, por tanto, reciben comandos de componentes estándar de la interfaz de usuario (como el elemento de menú Guardar archivo). Un documento recibe comandos reenviados por la vista activa. Si el documento no controla un comando determinado, reenvía el comando a la plantilla de documento que la administra.
Cuando se modifican los datos de un documento, cada una de sus vistas debe reflejar esas modificaciones. CDocument
proporciona la UpdateAllViews
función miembro para que notifique las vistas de estos cambios, por lo que las vistas se pueden volver a pintar según sea necesario. El marco también pide al usuario que guarde un archivo modificado antes de cerrarlo.
Para implementar documentos en una aplicación típica, debe hacer lo siguiente:
Derivar una clase de
CDocument
para cada tipo de documento.Agregar variables de miembro para almacenar los datos de cada documento.
Implementa funciones miembro para leer y modificar los datos del documento. Las vistas del documento son los usuarios más importantes de estas funciones miembro.
Invalida la
CObject::Serialize
función miembro de la clase de documento para escribir y leer los datos del documento hacia y desde el disco.
CDocument
admite el envío del documento por medio del correo electrónico, si presenta la compatibilidad con correo electrónico (MAPI). Consulte los artículos Compatibilidad con MAPI y MAPI en MFC.
Para obtener más información sobre CDocument
, vea Serialización, Temas de arquitectura de documentos y vistas y Creación de documentos o vistas.
Jerarquía de herencia
CDocument
Requisitos
Encabezado: afxwin.h
CDocument::AddView
Llama a esta función para adjuntar una vista al documento.
void AddView(CView* pView);
Parámetros
pView
Apunta a la vista que se va a agregar.
Comentarios
Esta función agrega la vista especificada a la lista de vistas asociadas al documento; la función también establece el puntero de documento de la vista en este documento. El marco llama a esta función al adjuntar un objeto de vista recién creado a un documento; esto ocurre en respuesta a un comando Archivo Nuevo, Abrir archivo o Nueva ventana o cuando se divide una ventana divisora.
Llama a esta función solo si vas a crear y adjuntar manualmente una vista. Normalmente, permitirá que el marco conecte documentos y vistas definiendo un CDocTemplate
objeto para asociar una clase de documento, una clase de vista y una clase de ventana de marco.
Ejemplo
// The following example toggles two views in an SDI (single document
// interface) frame window. A design decision must be made as to
// whether to leave the inactive view connected to the document,
// such that the inactive view continues to receive OnUpdate
// notifications from the document. It is usually desirable to
// keep the inactive view continuously in sync with the document, even
// though it is inactive. However, doing so incurs a performance cost,
// as well as the programming cost of implementing OnUpdate hints.
// It may be less expensive, in terms of performance and/or programming,
// to re-sync the inactive view with the document only with it is
// reactivated. This example illustrates this latter approach, by
// reconnecting the newly active view and disconnecting the newly
// inactive view, via calls to CDocument::AddView and RemoveView.
void CMainFrame::OnViewChange(UINT nCmdID)
// There is an ON_COMMAND_RANGE message map entry associated with
// OnViewChange:
// ON_COMMAND_RANGE(ID_VIEW_CHANGE1, ID_VIEW_CHANGE2, &OnViewChange)
{
CView *pViewAdd;
CView *pViewRemove;
CDocument *pDoc = GetActiveDocument();
// cvView1 and cvView2 are enum members defined in my CMainFrame class
if ((nCmdID == ID_VIEW_CHANGE1) && (m_currentView == cvView1))
return;
if ((nCmdID == ID_VIEW_CHANGE2) && (m_currentView == cvView2))
return;
if (nCmdID == ID_VIEW_CHANGE2)
{
if (m_pView2 == NULL)
{
m_pView1 = GetActiveView();
m_pView2 = new CMyView2;
//Note that if OnSize has been overridden in CMyView2
//and GetDocument() is used in this override it can
//cause assertions and, if the assertions are ignored,
//cause access violation.
m_pView2->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, rectDefault, this,
AFX_IDW_PANE_FIRST + 1, NULL);
}
pViewAdd = m_pView2;
pViewRemove = m_pView1;
m_currentView = cvView2;
}
else
{
pViewAdd = m_pView1;
pViewRemove = m_pView2;
m_currentView = cvView1;
}
// Set the child i.d. of the active view to AFX_IDW_PANE_FIRST,
// so that CFrameWnd::RecalcLayout will allocate to this
// "first pane" that portion of the frame window's client area
// not allocated to control bars. Set the child i.d. of the
// other view to anything other than AFX_IDW_PANE_FIRST; this
// examples switches the child id's of the two views.
int nSwitchChildID = pViewAdd->GetDlgCtrlID();
pViewAdd->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pViewRemove->SetDlgCtrlID(nSwitchChildID);
// Show the newly active view and hide the inactive view.
pViewAdd->ShowWindow(SW_SHOW);
pViewRemove->ShowWindow(SW_HIDE);
// Connect the newly active view to the document, and
// disconnect the inactive view.
pDoc->AddView(pViewAdd);
pDoc->RemoveView(pViewRemove);
SetActiveView(pViewAdd);
RecalcLayout();
}
CDocument::BeginReadChunks
Inicializa la lectura de fragmentos.
virtual void BeginReadChunks ();
Comentarios
CDocument::CanCloseFrame
Lo llama el marco antes de que se cierre una ventana de marco que muestre el documento.
virtual BOOL CanCloseFrame(CFrameWnd* pFrame);
Parámetros
pFrame
Apunta a la ventana de marco de una vista adjunta al documento.
Valor devuelto
Distinto de cero si es seguro cerrar la ventana de marco; de lo contrario, 0.
Comentarios
La implementación predeterminada comprueba si hay otras ventanas de marco que muestran el documento. Si la ventana de marco especificada es la última que muestra el documento, la función pide al usuario que guarde el documento si se ha modificado. Anule esta función si desea realizar un procesamiento especial cuando se cierra una ventana de marco. Se trata de una invalidación avanzada.
CDocument::CDocument
Construye un objeto CDocument
.
CDocument();
Comentarios
El marco controla la creación de documentos. Invalida la función miembro para realizar la OnNewDocument
inicialización por documento; esto es especialmente importante en las aplicaciones de interfaz de documento único (SDI).
CDocument::ClearChunkList
Borra la lista de fragmentos.
virtual void ClearChunkList ();
Comentarios
CDocument::ClearPathName
Borra la ruta del objeto documento.
virtual void ClearPathName();
Comentarios
Borrar la ruta de acceso de un CDocument
objeto hace que la aplicación solicite al usuario cuando el documento se guarde a continuación. Esto hace que un comando Guardar se comporte como un comando Guardar como.
CDocument::DeleteContents
Lo llama el marco de trabajo para eliminar los datos del documento sin destruir el CDocument
propio objeto.
virtual void DeleteContents();
Comentarios
Se llama justo antes de que se destruya el documento. También se llama para asegurarse de que un documento está vacío antes de reutilizarlo. Esto es especialmente importante para una aplicación SDI, que solo usa un documento; el documento se reutiliza cada vez que el usuario crea o abre otro documento. Llame a esta función para implementar un comando "Editar borrar todo" o similar que elimine todos los datos del documento. La implementación predeterminada de esta función no hace nada. Invalide esta función para eliminar los datos del documento.
Ejemplo
// This example is the handler for an Edit Clear All command.
void CExampleDoc::OnEditClearAll()
{
DeleteContents();
UpdateAllViews(NULL);
}
void CExampleDoc::DeleteContents()
{
// Re-initialize document data here.
}
CDocument::FindChunk
Busca un fragmento con el GUID especificado.
virtual POSITION FindChunk(
REFCLSID guid,
DWORD pid);
Parámetros
guid
Especifica el GUID de un fragmento que se va a buscar.
pid
Especifica un PID de un fragmento que se va a buscar.
Valor devuelto
Coloque en la lista de fragmentos internos si se realiza correctamente. De lo contrario, NULL
es .
Comentarios
CDocument::GetAdapter
Devuelve un puntero a la interfaz de implementación de objetos IDocument
.
virtual ATL::IDocument* GetAdapter();
Valor devuelto
Un puntero a un objeto que implementa la interfaz IDocument
.
Comentarios
CDocument::GetDocTemplate
Llama a esta función para obtener un puntero a la plantilla de documento para este tipo de documento.
CDocTemplate* GetDocTemplate() const;
Valor devuelto
Un puntero a la plantilla de documento para este tipo de documento o NULL si el documento no está administrado por una plantilla de documento.
Ejemplo
// This example accesses the doc template object to construct
// a default document name such as SHEET.XLS, where "sheet"
// is the base document name and ".xls" is the file extension
// for the document type.
CString strDefaultDocName, strBaseName, strExt;
CDocTemplate *pDocTemplate = GetDocTemplate();
if (!pDocTemplate->GetDocString(strBaseName, CDocTemplate::docName) || !pDocTemplate->GetDocString(strExt, CDocTemplate::filterExt))
{
AfxThrowUserException(); // These doc template strings will
// be available if you created the application using AppWizard
// and specified the file extension as an option for
// the document class produced by AppWizard.
}
strDefaultDocName = strBaseName + strExt;
CDocument::GetFile
Llama a esta función miembro para obtener un puntero a un objeto CFile
.
virtual CFile* GetFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError);
Parámetros
lpszFileName
Cadena que es la ruta de acceso al archivo deseado. La ruta de acceso puede ser relativa o absoluta.
pError
Un puntero a un objeto de excepción de archivo existente que indica el estado de finalización de la operación.
nOpenFlags
Modo de uso compartido y acceso. Especifica la acción que se debe realizar al abrir el archivo. Puedes combinar las opciones enumeradas en el constructor CFile CFile::CFile
mediante el operador OR bit a bit (|
). Se requieren un permiso de acceso y una opción de recurso compartido; los modos modeCreate
y modeNoInherit
son opcionales.
Valor devuelto
Puntero a un objeto CFile
.
CDocument::GetFirstViewPosition
Llama a esta función para obtener la posición de la primera vista de la lista de vistas asociadas al documento.
virtual POSITION GetFirstViewPosition() const;
Valor devuelto
Valor POSITION
que se puede usar para la iteración con la GetNextView
función miembro.
Ejemplo
//To get the first view in the list of views:
//To get the first view in the list of views:
// POSITION pos = GetFirstViewPosition();
// CView* pFirstView = GetNextView(pos);
//
// This example uses CDocument::GetFirstViewPosition
// and GetNextView to repaint each view.
// An easier way to accomplish the same result is to call
// UpdateAllViews(NULL);
void CExampleDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView *pView = GetNextView(pos);
pView->UpdateWindow();
}
}
CDocument::GetNextView
Llama a esta función para recorrer en iteración todas las vistas del documento.
virtual CView* GetNextView(POSITION& rPosition) const;
Parámetros
rPosition
Una referencia a un valor POSITION
devuelto por una llamada anterior de las funciones miembro GetNextView
o GetFirstViewPosition
. Este valor no debe ser NULL
.
Valor devuelto
Un puntero a la vista identificada por rPosition
.
Comentarios
La función devuelve la vista identificada por rPosition
y, a continuación, establece rPosition
en el valor POSITION
de la vista siguiente de la lista. Si la vista recuperada es la última de la lista, rPosition
se establece en NULL
.
Ejemplo
//To get the first view in the list of views:
//To get the first view in the list of views:
// POSITION pos = GetFirstViewPosition();
// CView* pFirstView = GetNextView(pos);
//
// This example uses CDocument::GetFirstViewPosition
// and GetNextView to repaint each view.
// An easier way to accomplish the same result is to call
// UpdateAllViews(NULL);
void CExampleDoc::OnRepaintAllViews()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView *pView = GetNextView(pos);
pView->UpdateWindow();
}
}
CDocument::GetPathName
Llame a esta función para obtener la ruta de acceso completa del archivo de disco del documento.
const CString& GetPathName() const;
Valor devuelto
Ruta de acceso completa del documento. Esta cadena está vacía si el documento no se ha guardado o no tiene asociado un archivo de disco.
CDocument::GetThumbnail
Crea un mapa de bits que usará el proveedor de miniaturas para mostrar la miniatura.
virtual BOOL GetThumbnail(
UINT cx,
HBITMAP* phbmp,
DWORD* pdwAlpha);
Parámetros
cx
Especifica el ancho y alto del mapa de bits.
phbmp
Contiene un identificador para un mapa de bits, cuando la función vuelve correctamente.
pdwAlpha
Contiene un valor DWORD
de canal alfa que especifica cuando la función devuelve correctamente.
Valor devuelto
Devuelve TRUE
si un mapa de bits de la miniatura se creó correctamente; de lo contrario FALSE
.
Comentarios
CDocument::GetTitle
Llame a esta función para obtener el título del documento, que normalmente se deriva del nombre de archivo del documento.
const CString& GetTitle() const;
Valor devuelto
El valor de este parámetro se corresponde con el título del documento en cuestión.
CDocument::InitializeSearchContent
Se llama para inicializar el contenido de búsqueda para el controlador de búsqueda.
virtual void InitializeSearchContent ();
Comentarios
Invalide este método en una clase derivada para inicializar el contenido de búsqueda. El contenido debe ser una cadena con partes delimitadas por «;». Por ejemplo, «point; rectángulo; ole item».
CDocument::IsModified
Llama a esta función para determinar si el documento se ha modificado desde que se guardó por última vez.
virtual BOOL IsModified();
Valor devuelto
Distinto de cero si el estado del documento se ha modificado desde que se guardó por última vez; de lo contrario es 0.
CDocument::IsSearchAndOrganizeHandler
Indica si esta instancia de CDocument
se creó para el controlador de búsqueda y organización.
BOOL IsSearchAndOrganizeHandler() const;
Valor devuelto
Devuelve TRUE
si se creó esta instancia de CDocument
para el controlador de búsqueda y organización.
Comentarios
Actualmente, esta función solo devuelve para los controladores de vista previa enriquecida TRUE
implementados en un servidor fuera de proceso. Puede establecer las marcas adecuadas (m_bPreviewHandlerMode
, m_bSearchMode
, m_bGetThumbnailMode
) en el nivel de aplicación para que esta función devuelva TRUE
.
CDocument::LoadDocumentFromStream
Se llama para cargar datos del documento desde la secuencia.
virtual HRESULT LoadDocumentFromStream(
IStream* pStream,
DWORD dwGrfMode);
Parámetros
pStream
Puntero a una estructura. El Shell proporciona esta secuencia.
dwGrfMode
Modo de acceso a la secuencia.
Valor devuelto
S_OK
es si la operación de carga se realiza correctamente; de lo contrario HRESULT
, se produce un código de error.
Comentarios
Puedes invalidar este método en una clase derivada para personalizar cómo cargar datos desde la secuencia.
CDocument::m_bGetThumbnailMode
Especifica el objeto CDocument
creado por dllhost para miniaturas. Debe comprobarse en CView::OnDraw
.
BOOL m_bGetThumbnailMode;
Comentarios
TRUE
indica que dllhost ha creado el documento para miniaturas.
CDocument::m_bPreviewHandlerMode
Especifica que el objeto CDocument
se creó mediante prevhost para Rich Preview. Debe comprobarse en CView::OnDraw
.
BOOL m_bPreviewHandlerMode;
Comentarios
TRUE
indica que el documento se creó mediante prevhost para Rich Preview.
CDocument::m_bSearchMode
Especifica que el indexador u otra aplicación de búsqueda creó el objeto CDocument
.
BOOL m_bSearchMode;
Comentarios
TRUE
indica que el indexador creó el documento o por otra aplicación de búsqueda.
CDocument::m_clrRichPreviewBackColor
Especifica el color de fondo de la ventana Rich Preview. El host establece este color.
COLORREF m_clrRichPreviewBackColor;
Comentarios
CDocument::m_clrRichPreviewTextColor
Especifica el color de primer plano de la ventana Rich Preview. El host establece este color.
COLORREF m_clrRichPreviewTextColor;
Comentarios
CDocument::m_lfRichPreviewFont
Especifica la fuente de texto de la ventana Rich Preview. El host establece esta información de fuente.
CFont m_lfRichPreviewFont;
Comentarios
CDocument::OnBeforeRichPreviewFontChanged
Se llama antes de cambiar la fuente Rich Preview.
virtual void OnBeforeRichPreviewFontChanged();
Comentarios
CDocument::OnChangedViewList
El marco lo llama después de agregar o quitar una vista en un documento.
virtual void OnChangedViewList();
Comentarios
La implementación predeterminada de esta función comprueba si se quita la última vista y, si es así, elimina el documento. Invalida esta función si desea realizar un procesamiento especial cuando el marco agrega o quita una vista. Por ejemplo, si deseas que un documento permanezca abierto incluso cuando no haya vistas adjuntas a él, invalida esta función.
CDocument::OnCloseDocument
Lo llama el marco cuando se cierra el documento, normalmente como parte del comando Cerrar archivo.
virtual void OnCloseDocument();
Comentarios
La implementación predeterminada de esta función destruye todos los marcos usados para ver el documento, cierra la vista, limpia el contenido del documento y, a continuación, llama a la DeleteContents
función miembro para eliminar los datos del documento.
Invalida esta función si desea realizar un proceso de limpieza especial cuando el marco de trabajo cierra un documento. Por ejemplo, si el documento representa un registro en una base de datos, quizás quiera invalidar esta función para cerrar la base de datos. Debe llamar a la versión de clase base de esta función desde la invalidación.
CDocument::OnCreatePreviewFrame
Lo llama el marco cuando necesita crear un marco de vista previa para La versión preliminar enriquecida.
virtual BOOL OnCreatePreviewFrame();
Valor devuelto
Devuelve TRUE
si el panel se crea correctamente; de lo contrario, FALSE
.
Comentarios
CDocument::OnDocumentEvent
Lo llama el marco en respuesta a un evento de documento.
virtual void OnDocumentEvent(DocumentEvent deEvent);
Parámetros
deEvent
[in] Un tipo de datos enumerado que describe el tipo de evento.
Comentarios
Los eventos de documento pueden afectar a varias clases. Este método es responsable de controlar los eventos de documento que afectan a las clases distintas de la CDocument
clase. Actualmente, la única clase que debe responder a eventos de documento es la CDataRecoveryHandler
clase. La CDocument
clase tiene otros métodos reemplazables responsables de controlar el efecto en CDocument
.
En la tabla siguiente se enumeran los valores posibles de deEvent
y los eventos a los que corresponden.
Valor | Evento correspondiente |
---|---|
onAfterNewDocument |
Se creó un nuevo documento. |
onAfterOpenDocument |
Se abrió un nuevo documento. |
onAfterSaveDocument |
El documento se guardó. |
onAfterCloseDocument |
Se cerró el documento. |
CDocument::OnDrawThumbnail
Invalida este método en una clase derivada para dibujar contenido de la miniatura.
virtual void OnDrawThumbnail(
CDC& dc,
LPRECT lprcBounds);
Parámetros
dc
Una referencia a un contexto de dispositivo.
lprcBounds
Especifica un rectángulo delimitador del área donde se debe dibujar la miniatura.
Comentarios
CDocument::OnFileSendMail
Envía un mensaje por medio del host de correo residente, (si existe), con el documento como adjunto.
void OnFileSendMail();
Comentarios
OnFileSendMail
llama a OnSaveDocument
para que serialice (guarde) documentos sin título y modificados en un archivo temporal, que se envía después por correo electrónico. Si el documento no se ha modificado, no es necesario un archivo temporal y se envía el original. OnFileSendMail
carga MAPI32.DLL si aún no lo ha hecho.
Una implementación especial de OnFileSendMail
para COleDocument
identificadores de archivos compuestos correctamente.
CDocument
admite el envío del documento por medio del correo electrónico, si presenta la compatibilidad con correo electrónico (MAPI). Consulta los artículos Temas MAPI y MAPI en MFC.
CDocument::OnLoadDocumentFromStream
Lo llama el marco cuando necesita cargar los datos del documento desde el flujo.
virtual HRESULT OnLoadDocumentFromStream(
IStream* pStream,
DWORD grfMode);
Parámetros
pStream
Un puntero a una secuencia entrante.
grfMode
Modo de acceso a la secuencia.
Valor devuelto
S_OK
si la carga tiene éxito; en caso contrario, un código de error.
Comentarios
CDocument::OnNewDocument
Lo llama el marco como parte del comando Archivo nuevo.
virtual BOOL OnNewDocument();
Valor devuelto
Distinto de cero si el documento se inicializó correctamente; de lo contrario, 0.
Comentarios
La implementación predeterminada de esta función llama a la DeleteContents
función miembro para asegurarse de que el documento está vacío y, a continuación, marca el nuevo documento como limpio. Invalide esta función para inicializar la estructura de datos de un nuevo documento. Debe llamar a la versión de clase base de esta función desde la invalidación.
Si el usuario elige el comando Archivo nuevo en una aplicación SDI, el marco usa esta función para reinicializar el documento existente, en lugar de crear uno nuevo. Si el usuario elige Archivo nuevo en una aplicación de interfaz de documento múltiple (MDI), el marco crea un nuevo documento cada vez y, a continuación, llama a esta función para inicializarlo. Debes colocar el código de inicialización en esta función en lugar de en el constructor para que el comando Archivo nuevo sea eficaz en las aplicaciones SDI.
Ten en cuenta que hay casos en OnNewDocument
los que se llama dos veces. Esto ocurre cuando el documento está incrustado como un servidor de documentos ActiveX. El método llama primero a la CreateInstance
función (expuesta por la COleObjectFactory
clase derivada) y una segunda vez por el InitNew
método (expuesto por la COleServerDoc
clase derivada).
Ejemplo
En los ejemplos siguientes se muestran métodos alternativos para inicializar un objeto de documento.
// Method 1: In an MDI application, the simplest place to do
// initialization is in the document constructor. The framework
// always creates a new document object for File New or File Open.
CExampleDoc::CExampleDoc()
{
// Do initialization of MDI document here.
}
// Method 2: In an SDI or MDI application, do all initialization
// in an override of OnNewDocument, if you are certain that
// the initialization is effectively saved upon File Save
// and fully restored upon File Open, via serialization.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
// Do initialization of new document here.
return TRUE;
}
// Method 3: If the initialization of your document is not
// effectively saved and restored by serialization (during File Save
// and File Open), then implement the initialization in single
// function (named InitMyDocument in this example). Call the
// shared initialization function from overrides of both
// OnNewDocument and OnOpenDocument.
BOOL CExampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
// If your new document object requires additional initialization
// not necessary when the document is deserialized via File Open,
// then perform that additional initialization here.
return TRUE;
}
CDocument::OnOpenDocument
Lo llama el marco como parte del comando Archivo abierto.
virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);
Parámetros
lpszPathName
Apunta a la ruta de acceso del documento que se va a abrir.
Valor devuelto
Distinto de cero si el documento se cargó correctamente; de lo contrario, 0.
Comentarios
La implementación predeterminada de esta función abre el archivo especificado, llama a la DeleteContents
función miembro para asegurarse de que el documento está vacío, llama CObject::Serialize
a para leer el contenido del archivo y, a continuación, marca el documento como limpio. Invalida esta función si desea usar algo distinto del mecanismo de archivo o el mecanismo de archivo. Por ejemplo, puede escribir una aplicación donde los documentos representan registros en una base de datos en lugar de archivos independientes.
Si el usuario elige el comando File Open en una aplicación SDI, el marco utiliza esta función para reiniciar el objeto existente CDocument
, en lugar de crear uno nuevo. Si el usuario elige Abrir archivo en una aplicación MDI, el marco construye un nuevo CDocument
objeto cada vez y, a continuación, llama a esta función para inicializarla. Debes colocar el código de inicialización en esta función en lugar de en el constructor para que el comando Archivo abierto sea eficaz en las aplicaciones SDI.
Ejemplo
En los ejemplos siguientes se muestran métodos alternativos para inicializar un objeto de documento.
// Method 1: In an MDI application, the simplest place to do
// initialization is in the document constructor. The framework
// always creates a new document object for File New or File Open.
CExampleDoc::CExampleDoc()
{
// Do initialization of MDI document here.
}
// Method 2: In an SDI or MDI application, do all initialization
// in an override of OnNewDocument, if you are certain that
// the initialization is effectively saved upon File Save
// and fully restored upon File Open, via serialization.
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
// Do initialization of new document here.
return TRUE;
}
// Method 3: If the initialization of your document is not
// effectively saved and restored by serialization (during File Save
// and File Open), then implement the initialization in single
// function (named InitMyDocument in this example). Call the
// shared initialization function from overrides of both
// OnNewDocument and OnOpenDocument.
BOOL CExampleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
// If your new document object requires additional initialization
// not necessary when the document is deserialized via File Open,
// then perform that additional initialization here.
return TRUE;
}
// Additional example of OnOpenDocument()
BOOL CExampleDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
{
return FALSE;
}
InitMyDocument(); // call your shared initialization function
return TRUE;
}
CDocument::OnPreviewHandlerQueryFocus
Dirige el controlador de vista previa para que devuelva desde la llamada HWND
a la función GetFocus
.
virtual HRESULT OnPreviewHandlerQueryFocus(HWND* phwnd);
Parámetros
phwnd
[out] Cuando este método devuelve, contiene un puntero al HWND devuelto de llamar a la GetFocus
función desde el subproceso de primer plano del controlador de vista previa.
Valor devuelto
Devuelve S_OK
si la operación se realiza correctamente; de lo contrario, devuelve un valor de error.
Comentarios
CDocument::OnPreviewHandlerTranslateAccelerator
Dirige el controlador de vista previa para controlar una pulsación de tecla pasada desde la bomba de mensajes del proceso en el que se ejecuta el controlador de vista previa.
virtual HRESULT OnPreviewHandlerTranslateAccelerator(MSG* pmsg);
Parámetros
pmsg
[in] Un puntero a una ventana.
Valor devuelto
Si el controlador de vista previa puede procesar el mensaje de pulsación de tecla, el controlador lo procesa y devuelve S_OK
. Si el controlador de vista previa no puede procesar el mensaje de pulsación de tecla, lo ofrece al host a través de IPreviewHandlerFrame::TranslateAccelerator
. Si el host procesa el mensaje, este método devuelve S_OK
. Si el host no procesa el mensaje, este método devuelve S_FALSE
.
Comentarios
CDocument::OnRichPreviewBackColorChanged
Se llama cuando ha cambiado el color de fondo de la vista previa enriquecida.
virtual void OnRichPreviewBackColorChanged();
Comentarios
CDocument::OnRichPreviewFontChanged
Se llama cuando ha cambiado la fuente Rich Preview.
virtual void OnRichPreviewFontChanged();
Comentarios
CDocument::OnRichPreviewSiteChanged
Se llama cuando el sitio de vista previa enriquecida ha cambiado.
virtual void OnRichPreviewSiteChanged();
Comentarios
CDocument::OnRichPreviewTextColorChanged
Se llama cuando ha cambiado el color del texto Rich Preview.
virtual void OnRichPreviewTextColorChanged();
Comentarios
CDocument::OnSaveDocument
Lo llama el marco como parte del comando Guardar archivo o Guardar como archivo.
virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);
Parámetros
lpszPathName
Apunta a la ruta de acceso completa a la que se debe guardar el archivo.
Valor devuelto
Distinto de cero si el documento se guardó correctamente; de lo contrario, 0.
Comentarios
La implementación predeterminada de esta función abre el archivo especificado, llama a CObject::Serialize
para escribir los datos del documento en el archivo y, a continuación, marca el documento como limpio. Anule esta función si desea realizar un procesamiento especial cuando el marco guarda un documento. Por ejemplo, puede escribir una aplicación donde los documentos representan registros en una base de datos en lugar de archivos independientes.
CDocument::OnUnloadHandler
Lo llama el marco cuando se descarga el controlador de vista previa.
virtual void OnUnloadHandler();
Comentarios
CDocument::OnUpdateFileSendMail
Habilita el comando si la compatibilidad ID_FILE_SEND_MAIL
con correo (MAPI) está presente.
void OnUpdateFileSendMail(CCmdUI* pCmdUI);
Parámetros
pCmdUI
Puntero al objeto CCmdUI
asociado al comando ID_FILE_SEND_MAIL
.
Comentarios
De lo contrario, la función quita el ID_FILE_SEND_MAIL
comando del menú, incluidos separadores por encima o por debajo del elemento de menú según corresponda. MAPI está habilitado si MAPI32.DLL
está presente en la ruta de acceso y, en la sección [Correo] del WIN.INI
archivo, MAPI=1. La mayoría de las aplicaciones colocan este comando en el menú Archivo.
CDocument
admite el envío del documento por medio del correo electrónico, si presenta la compatibilidad con correo electrónico (MAPI). Consulta los artículos Temas MAPI y MAPI en MFC.
CDocument::PreCloseFrame
El marco llama a esta función miembro antes de que se destruya la ventana de marco.
virtual void PreCloseFrame(CFrameWnd* pFrame);
Parámetros
pFrame
Puntero al CFrameWnd
que contiene el objeto asociado CDocument
.
Comentarios
Se puede invalidar para proporcionar una limpieza personalizada, pero asegúrese de llamar también a la clase base.
El valor predeterminado de PreCloseFrame
no hace nada en CDocument
. Las CDocument
clases derivadas COleDocument
de y CRichEditDoc
usan esta función miembro.
CDocument::ReadNextChunkValue
Lee el siguiente valor de fragmento.
virtual BOOL ReadNextChunkValue(IFilterChunkValue** ppValue);
Parámetros
ppValue
[out] Cuando la función devuelve, ppValue
contiene el valor que se leyó.
Valor devuelto
Si es correcta, su valor es distinto de cero. En caso contrario, es cero.
Comentarios
CDocument::ReleaseFile
El marco llama a esta función miembro para liberar un archivo, lo que hace que esté disponible para su uso por otras aplicaciones.
virtual void ReleaseFile(
CFile* pFile,
BOOL bAbort);
Parámetros
pFile
Un puntero al objeto CFile
que se va a versionar.
bAbort
Especifica si el archivo se va a liberar mediante CFile::Close
o CFile::Abort
. FALSE
si el archivo se va a liberar mediante CFile::Close
; TRUE
si el archivo se va a liberar mediante CFile::Abort
.
Comentarios
Si bAbort
es TRUE
, ReleaseFile
llama a CFile::Abort
y se libera el archivo. CFile::Abort
no producirá una excepción.
Si bAbort
es FALSE
, ReleaseFile
llama a CFile::Close
y se libera el archivo.
Invalida esta función miembro para requerir una acción por parte del usuario antes de que se libere el archivo.
CDocument::RemoveChunk
Quita un fragmento con especificado GUID
.
virtual void RemoveChunk(
REFCLSID guid,
DWORD pid);
Parámetros
Guid
Especifica el GUID
de un fragmento que se va a quitar.
Pid
Especifica el PID
de un fragmento que se va a quitar.
Comentarios
CDocument::RemoveView
Llama a esta función para desasociar una vista de un documento.
void RemoveView(CView* pView);
Parámetros
pView
Apunta a la vista que se va a agregar.
Comentarios
Esta función quita la vista especificada de la lista de vistas asociadas al documento; también establece el puntero del documento de la vista en NULL
. El marco llama a esta función cuando se cierra una ventana de marco o se cierra un panel de una ventana divisora.
Llama a esta función solo si va a desasociar manualmente una vista. Normalmente, permitirás que el marco desconecte documentos y vistas definiendo un CDocTemplate
objeto para asociar una clase de documento, una clase de vista y una clase de ventana de marco.
Consulta el ejemplo en AddView
para obtener una implementación de ejemplo.
CDocument::ReportSaveLoadException
Se llama si se produce una excepción (normalmente o CFileException
CArchiveException
) al guardar o cargar el documento.
virtual void ReportSaveLoadException(
LPCTSTR lpszPathName,
CException* e,
BOOL bSaving,
UINT nIDPDefault);
Parámetros
lpszPathName
Apunta al nombre del documento que se estaba guardando o cargando.
e
Obtiene la excepción que se produjo. Puede ser NULL
.
bSaving
Marca que indica qué operación estaba en curso; distinto de cero si el documento se estaba guardando, 0 si el documento se estaba cargando.
nIDPDefault
Identificador del mensaje de error que se mostrará si la función no especifica una más específica.
Comentarios
La implementación predeterminada examina el objeto de excepción y busca un mensaje de error que describe específicamente la causa. Si no se encuentra un mensaje específico o si e
es NULL
, se usa el mensaje general especificado por el parámetro nIDPDefault
. A continuación, la función muestra un cuadro de mensaje que contiene el mensaje de error. Invalida esta función si deseas proporcionar mensajes de error adicionales personalizados. Se trata de una invalidación avanzada.
CDocument::SaveModified
Lo llama el marco antes de cerrar un documento modificado.
virtual BOOL SaveModified();
Valor devuelto
Distinto de cero si es seguro continuar y cerrar el documento; 0 si el documento no debe cerrarse.
Comentarios
La implementación predeterminada de esta función muestra un cuadro de mensaje que pregunta al usuario si desea guardar los cambios en el documento, si se ha realizado alguno. Invalida esta función si el programa requiere un procedimiento de solicitud diferente. Se trata de una invalidación avanzada.
CDocument::SetChunkValue
Establece un valor de fragmento.
virtual BOOL SetChunkValue (IFilterChunkValue* pValue);
Parámetros
pValue
Especifica el valor del fragmento que se va a establecer.
Valor devuelto
Si es correcta, su valor es distinto de cero. En caso contrario, es cero.
Comentarios
CDocument::SetModifiedFlag
Llama a esta función después de haber realizado cualquier modificación en el documento.
virtual void SetModifiedFlag(BOOL bModified = TRUE);
Parámetros
bModified
Marca que indica si se ha modificado el documento.
Comentarios
Al llamar a esta función de forma coherente, asegúrese de que el marco solicita al usuario que guarde los cambios antes de cerrar un documento. Normalmente, debe usar el valor predeterminado de TRUE
para el parámetro bModified
. Para marcar un documento como limpio (sin modificar), llame a esta función con un valor de FALSE
.
CDocument::SetPathName
Llame a esta función para especificar la ruta de acceso completa del archivo de disco del documento.
virtual void SetPathName(
LPCTSTR lpszPathName,
BOOL bAddToMRU = TRUE);
Parámetros
lpszPathName
Apunta a la cadena que se va a usar como ruta de acceso del documento.
bAddToMRU
Determina si el nombre de archivo se agrega a la lista de archivos (MRU) usada más recientemente. Si TRUE
, se agrega el nombre de archivo; si FALSE
, no se agrega.
Comentarios
Según el valor de la ruta de acceso bAddToMRU
se agregue o no a la lista de MRU mantenida por la aplicación. Ten en cuenta que algunos documentos no están asociados a un archivo de disco. Llama a esta función solo si va a invalidar la implementación predeterminada para abrir y guardar archivos usados por el marco de trabajo.
CDocument::SetTitle
Llama a esta función para especificar el título del documento (la cadena mostrada en la barra de título de una ventana de marco).
virtual void SetTitle(LPCTSTR lpszTitle);
Parámetros
lpszTitle
Apunta a la cadena que se va a usar como título del documento.
Comentarios
Al llamar a esta función, se actualizan los títulos de todas las ventanas de marco que muestran el documento.
CDocument::UpdateAllViews
Llame a esta función después de modificar el documento.
void UpdateAllViews(
CView* pSender,
LPARAM lHint = 0L,
CObject* pHint = NULL);
Parámetros
pSender
Apunta a la vista que modificó el documento o NULL
si se van a actualizar todas las vistas.
lHint
Contiene información sobre la modificación.
pHint
Apunta a un objeto que almacena información sobre las modificaciones.
Comentarios
Debe llamar a esta función después de llamar a la SetModifiedFlag
función miembro. Esta función informa a cada vista adjunta al documento, excepto la vista especificada por pSender
, de que el documento se ha modificado. Normalmente, se llama a esta función desde la clase de vista después de que el usuario haya cambiado el documento a través de una vista.
Esta función llama a la función CView::OnUpdate
miembro para cada una de las vistas del documento, excepto la vista de envío, pasando pHint
y lHint
. Use estos parámetros para pasar información a las vistas sobre las modificaciones realizadas en el documento. Puedes codificar información mediante lHint
y/o puedes definir una clase derivada de CObject
para almacenar información sobre las modificaciones y pasar un objeto de esa clase mediantepHint
. Invalida la CView::OnUpdate
función miembro en la CView
clase derivada de para optimizar la actualización de la presentación de la vista en función de la información pasada.
Ejemplo
void CExampleDoc::OnUpdateAllViews()
{
UpdateAllViews(NULL);
}
Vea también
Ejemplo de MFCMDIDOCVW
Ejemplo de MFCSNAPVW
Ejemplo de MFCNPP
CCmdTarget
(clase)
Gráfico de jerarquías
CCmdTarget
(clase)
CView
(clase)
CDocTemplate
(clase)