Compartir a través de


Clase CView

Proporciona la funcionalidad básica para las clases de vista definidas por el usuario.

Sintaxis

class AFX_NOVTABLE CView : public CWnd

Miembros

Constructores protegidos

Nombre Descripción
CView::CView Construye un objeto CView.

Métodos públicos

Nombre Descripción
CView::DoPreparePrinting Muestra el cuadro de diálogo Imprimir y crea el contexto del dispositivo de impresora; llame al invalidar la función miembro OnPreparePrinting.
CView::GetDocument Devuelve el documento asociado a la vista.
CView::IsSelected Comprueba si se ha seleccionado un elemento de documento. Se requiere para la compatibilidad con OLE.
CView::OnDragEnter Se llama cuando un elemento se arrastra por primera vez a la región de arrastrar y colocar de una vista.
CView::OnDragLeave Se llama cuando un elemento se retira de la región de arrastrar y colocar de una vista.
CView::OnDragOver Se llama cuando un elemento se arrastra a la región de arrastrar y colocar de una vista.
CView::OnDragScroll Se llama para determinar si el cursor se arrastra a la región de desplazamiento de la ventana.
CView::OnDrop Se llama cuando se ha colocado un elemento en la región de arrastrar y colocar de una vista, controlador predeterminado.
CView::OnDropEx Se llama cuando se ha colocado un elemento en la región de arrastrar y colocar de una vista, controlador principal.
CView::OnInitialUpdate Se llama después de que una vista se adjunte primero a un documento.
CView::OnPrepareDC Se llama antes de llamar a la función miembro OnDraw para mostrar la pantalla o se llama a la función miembro OnPrint para la impresión o la vista previa de impresión.
CView::OnScroll Se llama cuando los elementos OLE se arrastran más allá de los bordes de la vista.
CView::OnScrollBy Se llama al desplazarse por una vista que contiene elementos OLE activos en contexto.

Métodos protegidos

Nombre Descripción
CView::OnActivateFrame Se llama cuando la ventana de marco que contiene la vista está activada o desactivada.
CView::OnActivateView Se llama cuando se activa una vista.
CView::OnBeginPrinting Se llama cuando comienza un trabajo de impresión; se debe invalidar para asignar recursos de interfaz de dispositivo gráfico (GDI).
CView::OnDraw Se llama para representar una imagen del documento para mostrar, imprimir o ver una vista previa de la impresión. Se requiere la implementación.
CView::OnEndPrinting Se llama cuando finaliza un trabajo de impresión; se debe invalidar para desasignar recursos de GDI.
CView::OnEndPrintPreview Se llama cuando se cierra el modo de vista previa.
CView::OnPreparePrinting Se llama antes de imprimir o ver una vista previa un documento; se debe invalidar para inicializar el cuadro de diálogo Imprimir.
CView::OnPrint Se llama para imprimir u obtener la vista previa de una página del documento.
CView::OnUpdate Se llama para notificar a una vista que se ha modificado su documento.

Comentarios

Una vista se adjunta a un documento y actúa como intermediario entre el documento y el usuario: la vista representa una imagen del documento en la pantalla o la impresora e interpreta la entrada del usuario como operaciones en el documento.

Una vista es un elemento secundario de una ventana de marco. Más de una vista puede compartir una ventana de marco, como en el caso de una ventana divisora. Un objeto CDocTemplate establece la relación entre una clase de vista, una clase de ventana de marco y una clase de documento. Cuando el usuario abre una nueva ventana o divide una existente, el marco crea una nueva vista y la adjunta al documento.

Una vista solo se puede adjuntar a un documento, pero un documento puede tener varias vistas adjuntas a la vez; por ejemplo, si el documento se muestra en una ventana divisora o en varias ventanas secundarias en una aplicación de interfaz de documento múltiple (MDI). La aplicación puede admitir diferentes tipos de vistas para un tipo de documento determinado; por ejemplo, un programa de procesamiento de textos puede proporcionar una vista de texto completa de un documento y una vista de esquema que muestre solo los encabezados de sección. Estos diferentes tipos de vistas se pueden colocar en ventanas de marco independientes o en paneles independientes de una sola ventana de marco si se usa una ventana divisora.

Una vista puede ser responsable de controlar varios tipos diferentes de entradas, como la entrada del teclado, la entrada del mouse o la entrada mediante arrastrar y colocar, así como comandos de menús, barras de herramientas o barras de desplazamiento. Una vista recibe comandos reenviados por su ventana de marco. Si la vista no controla un comando determinado, reenvía el comando a su documento asociado. Al igual que todos los comandos de destino, las vistas controlan los mensajes mediante mapas de mensajes.

La vista es responsable de mostrar y modificar los datos del documento, pero no de almacenarlos. El documento proporciona la vista con los detalles necesarios sobre sus datos. Puede permitir que la vista acceda directamente a los miembros de datos del documento, o bien puede proporcionar funciones miembro en la clase de documento para que llame a la clase de vista.

Cuando cambian los datos de un documento, la vista responsable de los cambios normalmente llama a la función CDocument::UpdateAllViews el documento, que notifica a todas las demás vistas llamando a la función miembro OnUpdate de cada una. La implementación predeterminada de OnUpdate invalida todo el área de cliente de la vista. Puede invalidarlo para reemplazar solo las regiones del área de cliente que se asignan a las partes modificadas del documento.

Para usar CView, derive una clase de ella e implemente la función miembro OnDraw para realizar la visualización de pantalla. También puede usar OnDraw para realizar la impresión y la vista previa de impresión. El marco controla el bucle de impresión para imprimir y obtener una vista previa del documento.

Una vista controla los mensajes de la barra de desplazamiento con las funciones miembro CWnd::OnHScroll y CWnd::OnVScroll. Puede implementar el control de mensajes de la barra de desplazamiento en estas funciones o puede usar la clase derivada CView de CScrollView para controlar el desplazamiento automáticamente.

Además de CScrollView, la biblioteca MCF (Microsoft Foundation Class) proporciona nueve otras clases derivadas de CView:

  • CCtrlView, una vista que permite el uso de documentos: arquitectura de vista con controles de edición enriquecida, lista y árbol.

  • CDaoRecordView, una vista que muestra registros de una base de datos en controles de cuadro de diálogo.

  • CEditView, una vista que proporciona un editor de texto multilínea simple. Puede usar un objeto CEditView como un control en un cuadro de diálogo, así como una vista en un documento.

  • CFormView, una vista desplazable que contiene controles de cuadro de diálogo y se basa en un recurso de plantilla de diálogo.

  • CListView, una vista que permite el uso de documentos: arquitectura de vista con controles de lista.

  • CRecordView, una vista que muestra registros de una base de datos en controles de cuadro de diálogo.

  • CRichEditView, una vista que permite el uso de documentos: arquitectura de vista con controles de edición enriquecidos.

  • CScrollView, una vista que proporciona automáticamente compatibilidad con el desplazamiento.

  • CTreeView, una vista que permite el uso de documentos: arquitectura de vista con controles de árbol.

La clase CView también tiene una clase de implementación derivada denominada CPreviewView, que usa el marco para realizar la vista previa de impresión. Esta clase proporciona compatibilidad con las características únicas de la ventana de vista previa de impresión, como una barra de herramientas, una vista previa de página única o doble, y el zoom, es decir, ampliar la imagen en vista previa. No es necesario llamar o invalidar ninguna de las funciones miembro de CPreviewView a menos que desee implementar su propia interfaz para la vista previa de impresión (por ejemplo, si desea admitir la edición en modo de vista previa de impresión). Para obtener más información sobre el uso de CView, Arquitectura/documento vista, consulte Impresión. Además, consulte la Nota técnica 30 para obtener más detalles sobre cómo personalizar la vista previa de impresión.

Jerarquía de herencia

CObject

CCmdTarget

CWnd

CView

Requisitos

Encabezado: afxwin.h

CView::CView

Construye un objeto CView.

CView();

Comentarios

El marco llama al constructor cuando se crea una nueva ventana de marco o se divide una ventana. Invalide la función miembro OnInitialUpdate para inicializar la vista después de adjuntar el documento.

CView::DoPreparePrinting

Llame a esta función desde la invalidación de OnPreparePrinting para invocar el cuadro de diálogo Imprimir y crear un contexto de dispositivo de impresora.

BOOL DoPreparePrinting(CPrintInfo* pInfo);

Parámetros

pInfo
Apunta a una estructura CPrintInfo que describe el trabajo de impresión actual.

Valor devuelto

Distinto de cero si se puede comenzar la impresión o vista previa de impresión; 0 si se ha cancelado la operación.

Comentarios

El comportamiento de esta función depende de si se llama para imprimir o para la vista previa de impresión (especificado por el miembro m_bPreview del parámetro pInfo). Si se imprime un archivo, esta función invoca el cuadro de diálogo Imprimir, utilizando los valores de la estructura CPrintInfo a la que apunta pInfo; después de que el usuario haya cerrado el cuadro de diálogo, la función crea un contexto de dispositivo de impresora basado en la configuración especificada por el usuario en el cuadro de diálogo y devuelve este contexto de dispositivo a través del parámetro pInfo. Este contexto de dispositivo se usa para imprimir el documento.

Si se está previsualizando un archivo, esta función crea un contexto de dispositivo de impresora mediante la configuración actual de la impresora; este contexto de dispositivo se usa para simular la impresora durante la vista previa.

CView::GetDocument

Llame a esta función para obtener un puntero al documento de la vista.

CDocument* GetDocument() const;

Valor devuelto

Puntero al objeto CDocument asociado a la vista. NULL si la vista no está adjunta a un documento.

Comentarios

Esto le permite llamar a las funciones miembro del documento.

CView::IsSelected

Lo llama el marco para comprobar si el elemento de documento especificado está seleccionado.

virtual BOOL IsSelected(const CObject* pDocItem) const;

Parámetros

pDocItem
Apunta al elemento de documento que se está probando.

Valor devuelto

Distinto de cero si se selecciona el elemento de documento especificado; de lo contrario, 0.

Comentarios

La implementación predeterminada de esta función devuelve FALSE. Invalide esta función si va a implementar la selección mediante objetos CDocItem. Debe invalidar esta función si la vista contiene elementos OLE.

CView::OnActivateFrame

El marco la llama cuando la ventana de marco que contiene la vista está activada o desactivada.

virtual void OnActivateFrame(
    UINT nState,
    CFrameWnd* pFrameWnd);

Parámetros

nState
Especifica si la ventana de marco se está activando o desactivando. Puede ser uno de los siguientes valores:

  • WA_INACTIVE La ventana de marco se está desactivando.

  • WA_ACTIVE La ventana de marco se está activando mediante algún método distinto de un clic del mouse (por ejemplo, mediante el uso de la interfaz de teclado para seleccionar la ventana).

  • WA_CLICKACTIVE La ventana de marco se está activando con un clic del mouse.

pFrameWnd
Puntero a la ventana de marco que se va a activar.

Comentarios

Invalide esta función miembro si quiere realizar un procesamiento especial cuando se activa o desactiva la ventana de marco asociada a la vista. Por ejemplo, CFormView realiza esta invalidación cuando guarda y restaura el control que tiene el foco.

CView::OnActivateView

Lo llama el marco cuando se activa o desactiva una vista.

virtual void OnActivateView(
    BOOL bActivate,
    CView* pActivateView,
    CView* pDeactiveView);

Parámetros

bActivate
Indica si la vista se está activando o desactivando.

pActivateView
Apunta al objeto de vista que se está activando.

pDeactiveView
Apunta al objeto de vista que se está desactivando.

Comentarios

La implementación predeterminada de esta función establece el foco en la vista que se está activando. Invalide esta función si desea realizar un procesamiento especial cuando se activa o desactiva una vista. Por ejemplo, si desea proporcionar indicaciones visuales especiales que distingan la vista activa de las vistas inactivas, deberá examinar el parámetro bActivate y actualizar la apariencia de la vista en consecuencia.

Los parámetros pActivateView y pDeactiveView apuntan a la misma vista si la ventana de marco principal de la aplicación se activa sin ningún cambio en la vista activa; por ejemplo, si el foco se transfiere de otra aplicación a esta, en lugar de una vista a otra dentro de la aplicación o al cambiar entre ventanas secundarias MDI. Esto permite que una vista vuelva a obtener su paleta, si es necesario.

Estos parámetros difieren cuando CFrameWnd::SetActiveView se llama a con una vista diferente de lo que CFrameWnd::GetActiveView devolvería. Esto sucede con mayor frecuencia con ventanas divisoras.

CView::OnBeginPrinting

Lo llama el marco al comenzar un trabajo de impresión o de vista previa de impresión, después de llamar a OnPreparePrinting .

virtual void OnBeginPrinting(
    CDC* pDC,
    CPrintInfo* pInfo);

Parámetros

pDC
Apunta al contexto del dispositivo de impresora.

pInfo
Apunta a una estructura CPrintInfo que describe el trabajo de impresión actual.

Comentarios

La implementación predeterminada de esta función no hace nada. Reemplace esta función para asignar los recursos de GDI, como lápices o fuentes, que se necesitan específicamente para imprimir. Seleccione los objetos GDI en el contexto del dispositivo dentro de la función miembro OnPrint para cada página que los use. Si usa el mismo objeto de vista para realizar la presentación en pantalla y la impresión, use variables independientes para los recursos GDI necesarios para cada presentación; esto le permite actualizar la pantalla durante la impresión.

También puede usar esta función para realizar inicializaciones que dependan de las propiedades del contexto del dispositivo de impresora. Por ejemplo, el número de páginas necesarias para imprimir el documento puede depender de la configuración que especificó el usuario en el cuadro de diálogo Imprimir (por ejemplo, la longitud de la página). En esta situación, no puede especificar la longitud del documento en la función miembro OnPreparePrinting, donde lo haría normalmente. Debe esperar a que se cree el contexto del dispositivo de impresora en función de la configuración del cuadro de diálogo. OnBeginPrinting es la primera función reemplazable que proporciona acceso al objeto CDC que representa el contexto del dispositivo de impresora, por lo que puede establecer la longitud del documento desde esta función. Tenga en cuenta que si no se especifica la longitud del documento en este momento, no se muestra una barra de desplazamiento durante la vista previa de impresión.

CView::OnDragEnter

Lo llama el marco cuando el mouse entra por primera vez en la región que no se desplaza de la ventana de destino de colocación.

virtual DROPEFFECT OnDragEnter(
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

Parámetros

pDataObject
Apunta al elemento COleDataObject que se arrastra al área de colocación de la vista.

dwKeyState
Contiene el estado de las claves modificadoras. Se trata de una combinación de cualquiera de los siguientes números, MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTON y MK_RBUTTON.

point
Posición actual del mouse con respecto al área de cliente de la vista.

Valor devuelto

Valor del tipo enumerado DROPEFFECT, que indica el tipo de colocación que se produciría si el usuario colocó el objeto en esta posición. El tipo de colocación normalmente depende del estado de clave actual indicado por dwKeyState. Una asignación estándar de los estados clave a los valores DROPEFFECT es:

  • DROPEFFECT_NONE El objeto de datos no se puede colocar en esta ventana.

  • DROPEFFECT_LINK para MK_CONTROL|MK_SHIFT Crea una vinculación entre el objeto y su servidor.

  • DROPEFFECT_COPY para MK_CONTROL Crea una copia del objeto colocado.

  • DROPEFFECT_MOVE para MK_ALT Crea una copia del objeto colocado y elimina el objeto original. Suele ser el efecto de colocación predeterminado, cuando la vista puede aceptar este objeto de datos.

Para obtener más información, vea el ejemplo de conceptos avanzados de MFC OCLIENT.

Comentarios

La implementación predeterminada consiste en no hacer nada y devolver DROPEFFECT_NONE.

Invalide esta función para prepararse para futuras llamadas a la función miembro OnDragOver. Los datos necesarios del objeto de datos se deben recuperar en este momento para su uso posterior en la función miembro OnDragOver. La vista también debe actualizarse en este momento para proporcionar los comentarios visuales del usuario. Para obtener más información, consulte el artículo Funciones OLE de arrastrar y colocar: Implementación de un destino de colocación.

CView::OnDragLeave

Lo llama el marco durante una operación de arrastre cuando el mouse se mueve fuera del área de colocación válida para esa ventana.

virtual void OnDragLeave();

Comentarios

Invalide esta función si la vista actual necesita limpiar las acciones realizadas durante las llamadas OnDragEnter o OnDragOver, como quitar los comentarios de los usuarios visuales mientras el objeto se arrastró y colocó.

CView::OnDragOver

Lo llama el marco durante una operación de arrastre cuando el mouse se mueve sobre la ventana de destino de colocación.

virtual DROPEFFECT OnDragOver(
    COleDataObject* pDataObject,
    DWORD dwKeyState,
    CPoint point);

Parámetros

pDataObject
Apunta al objeto COleDataObject que se arrastra sobre el destino de colocación.

dwKeyState
Contiene el estado de las claves modificadoras. Se trata de una combinación de cualquiera de los siguientes números, MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTON y MK_RBUTTON.

point
Posición actual del mouse con respecto al área de cliente de la vista.

Valor devuelto

Valor del tipo enumerado DROPEFFECT, que indica el tipo de colocación que se produciría si el usuario colocó el objeto en esta posición. El tipo de colocación suele depender del estado de clave actual indicado por dwKeyState. Una asignación estándar de los estados clave a los valores DROPEFFECT es:

  • DROPEFFECT_NONE El objeto de datos no se puede colocar en esta ventana.

  • DROPEFFECT_LINK para MK_CONTROL|MK_SHIFT Crea una vinculación entre el objeto y su servidor.

  • DROPEFFECT_COPY para MK_CONTROL Crea una copia del objeto colocado.

  • DROPEFFECT_MOVE para MK_ALT Crea una copia del objeto colocado y elimina el objeto original. Suele ser el efecto de colocación predeterminado, cuando la vista puede aceptar el objeto de datos.

Para obtener más información, vea el ejemplo de conceptos avanzados de MFC OCLIENT.

Comentarios

La implementación predeterminada consiste en no hacer nada y devolver DROPEFFECT_NONE.

Invalide esta función para proporcionar a los usuarios comentarios visuales durante la operación de arrastre. Dado que se llama a esta función continuamente, cualquier código contenido en ella debe optimizarse tanto como sea posible. Para obtener más información, consulte el artículo Funciones OLE de arrastrar y colocar: Implementación de un destino de colocación.

CView::OnDragScroll

Lo llama el marco antes de llamar a OnDragEnter o OnDragOver para determinar si el punto está en la región de desplazamiento.

virtual DROPEFFECT OnDragScroll(
    DWORD dwKeyState,
    CPoint point);

Parámetros

dwKeyState
Contiene el estado de las claves modificadoras. Se trata de una combinación de cualquiera de los siguientes números, MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON, MK_MBUTTON y MK_RBUTTON.

point
Contiene la ubicación del cursor, en píxeles, con respecto a la pantalla.

Valor devuelto

Valor del tipo enumerado DROPEFFECT, que indica el tipo de colocación que se produciría si el usuario colocó el objeto en esta posición. El tipo de colocación normalmente depende del estado de clave actual indicado por dwKeyState. Una asignación estándar de los estados clave a los valores DROPEFFECT es:

  • DROPEFFECT_NONE El objeto de datos no se puede colocar en esta ventana.

  • DROPEFFECT_LINK para MK_CONTROL|MK_SHIFT Crea una vinculación entre el objeto y su servidor.

  • DROPEFFECT_COPY para MK_CONTROL Crea una copia del objeto colocado.

  • DROPEFFECT_MOVE para MK_ALT Crea una copia del objeto colocado y elimina el objeto original.

  • DROPEFFECT_SCROLL Indica que una operación de desplazamiento de arrastre está a punto de producirse o que se está produciendo en la vista de destino.

Para obtener más información, vea el ejemplo de conceptos avanzados de MFC OCLIENT.

Comentarios

Invalide esta función cuando quiera proporcionar un comportamiento especial para este evento. La implementación predeterminada desplaza automáticamente las ventanas cuando el cursor se arrastra a la región de desplazamiento predeterminada dentro del borde de cada ventana. Para obtener más información, consulte el artículo Funciones OLE de arrastrar y colocar: Implementación de un destino de colocación.

CView::OnDraw

Lo llama el marco para representar una imagen del documento.

virtual void OnDraw(CDC* pDC) = 0;

Parámetros

pDC
Apunta al contexto del dispositivo que se va a usar para representar una imagen del documento.

Comentarios

El marco llama a esta función para realizar la visualización de pantalla, la impresión y la vista previa de impresión, y pasa un contexto de dispositivo diferente en cada caso. No hay ninguna implementación predeterminada.

Debe invalidar esta función para mostrar la vista del documento. Puede realizar llamadas de interfaz gráfica de dispositivo (GDI) mediante el objeto CDC al que apunta el parámetro pDC. Puede seleccionar recursos GDI, como lápices o fuentes, en el contexto del dispositivo antes de dibujar y, a continuación, anular su selección. A menudo, el código de dibujo puede ser independiente del dispositivo; es decir, no requiere información sobre el tipo de dispositivo que muestra la imagen.

Para optimizar el dibujo, llame a la función miembro RectVisible del contexto del dispositivo para averiguar si se dibujará un rectángulo determinado. Si necesita distinguir entre la pantalla normal y la impresión, llame a la función miembro IsPrinting del contexto del dispositivo.

CView::OnDrop

Lo llama el marco cuando el usuario libera un objeto de datos sobre un destino de colocación válido.

virtual BOOL OnDrop(
    COleDataObject* pDataObject,
    DROPEFFECT dropEffect,
    CPoint point);

Parámetros

pDataObject
Apunta al objeto COleDataObject que se coloca en el destino de colocación.

dropEffect
Efecto de colocación que el usuario ha solicitado.

  • DROPEFFECT_COPY Crea una copia del objeto de datos que se va a colocar.

  • DROPEFFECT_MOVE Mueve el objeto de datos a la ubicación actual del mouse.

  • DROPEFFECT_LINK Crea un vínculo entre un objeto de datos y su servidor.

point
Posición actual del mouse con respecto al área de cliente de la vista.

Valor devuelto

Distinto de cero si la colocación se ha realizado correctamente; de lo contrario, 0.

Comentarios

La implementación predeterminada no hace nada y devuelve FALSE.

Invalide esta función para implementar el efecto de una colocación OLE en el área de cliente de la vista. El objeto de datos se puede examinar mediante pDataObject para los formatos de datos del Portapapeles y los datos colocados en el punto especificado.

Nota:

El marco de trabajo no llama a esta función si hay una invalidación en OnDropEx en esta clase de vista.

CView::OnDropEx

Lo llama el marco cuando el usuario libera un objeto de datos sobre un destino de colocación válido.

virtual DROPEFFECT OnDropEx(
    COleDataObject* pDataObject,
    DROPEFFECT dropDefault,
    DROPEFFECT dropList,
    CPoint point);

Parámetros

pDataObject
Apunta al objeto COleDataObject que se coloca en el destino de colocación.

dropDefault
Efecto que el usuario eligió para la operación de colocación predeterminada en función del estado de clave actual. Puede ser DROPEFFECT_NONE. Los efectos de colocación se describen en la sección Comentarios.

dropList
Lista de los efectos de colocación que admite el origen de colocación. Los valores de efecto de colocación pueden combinarse mediante la operación bit a bit OR (|). Los efectos de colocación se describen en la sección Comentarios.

point
Posición actual del mouse con respecto al área de cliente de la vista.

Valor devuelto

Efecto de colocación resultante del intento de colocación en la ubicación especificada por point. Debe ser uno de los valores indicados por dropEffectList. Los efectos de colocación se describen en la sección Comentarios.

Comentarios

La implementación predeterminada es no hacer nada y devolver un valor ficticio ( -1 ) para indicar que el marco debe llamar al controlador OnDrop.

Invalide esta función para implementar el efecto de arrastrar y colocar un botón derecho del mouse. El efecto de arrastrar y colocar con el botón derecho del mouse muestra normalmente un menú de opciones cuando se suelta el botón derecho del mouse.

La invalidación de OnDropEx debe consultar el botón derecho del mouse. Puede llamar GetKeyState o almacenar el estado del botón derecho del mouse desde el controlador OnDragEnter.

  • Si el botón derecho del mouse está inactivo, la invalidación debe mostrar un menú emergente que ofrezca la compatibilidad con los efectos de colocación por parte del origen de la colocación.

    • Examine dropList para determinar los efectos de eliminación admitidos por el origen de colocación. Habilite solo estas acciones en el menú emergente.

    • Use SetMenuDefaultItem para establecer la acción predeterminada basada en dropDefault.

    • Por último, realice la acción indicada por la selección del usuario en el menú emergente.

  • Si el botón derecho del mouse no está inactivo, la invalidación debe procesarlo como una solicitud de colocación estándar. Use el efecto de colocación especificado en dropDefault. Como alternativa, la invalidación puede devolver el valor ficticio (-1) para indicar que OnDrop controlará esta operación de colocación.

Use pDataObject para examinar el COleDataObject para el formato de datos del Portapapeles y los datos quitados en el punto especificado.

Los efectos de colocación describen la acción asociada a una operación de colocación. Consulte la siguiente lista de efectos de colocación:

  • DROPEFFECT_NONE No se permitiría una colocación.

  • DROPEFFECT_COPY Se realizaría una operación de copia.

  • DROPEFFECT_MOVE Se realizaría una operación de movimiento.

  • DROPEFFECT_LINK Se establecería un vínculo de los datos colocados a los datos originales.

  • DROPEFFECT_SCROLL Indica que una operación de desplazamiento de arrastre está a punto de producirse o que se está produciendo en el destino.

Para obtener más información sobre cómo establecer el comando de menú predeterminado, vea SetMenuDefaultItem en Windows SDK y CMenu::GetSafeHmenu en este volumen.

CView::OnEndPrinting

Lo llama el marco después de imprimir o obtener una vista previa de un documento.

virtual void OnEndPrinting(
    CDC* pDC,
    CPrintInfo* pInfo);

Parámetros

pDC
Apunta al contexto del dispositivo de impresora.

pInfo
Apunta a una estructura CPrintInfo que describe el trabajo de impresión actual.

Comentarios

La implementación predeterminada de esta función no hace nada. Invalide esta función para liberar los recursos de GDI asignados en la función miembro OnBeginPrinting.

CView::OnEndPrintPreview

Lo llama el marco cuando el usuario sale del modo de vista previa de impresión.

virtual void OnEndPrintPreview(
    CDC* pDC,
    CPrintInfo* pInfo,
    POINT point,
    CPreviewView* pView);

Parámetros

pDC
Apunta al contexto del dispositivo de impresora.

pInfo
Apunta a una estructura CPrintInfo que describe el trabajo de impresión actual.

point
Especifica el punto de la página que se mostró por última vez en el modo de vista previa.

pView
Apunta al objeto de vista usado para la vista previa.

Comentarios

La implementación predeterminada de esta función llama a la función miembro OnEndPrinting y restaura la ventana de marco principal al estado en el que estaba antes de que comenzara la vista previa de impresión. Invalide esta función para realizar un procesamiento especial cuando finalice el modo de vista previa. Por ejemplo, si quiere mantener la posición del usuario en el documento al cambiar del modo de vista previa al modo de visualización normal, puede desplazarse a la posición descrita por el parámetro point y el miembro m_nCurPage de la estructura CPrintInfo a la que apunta el parámetro pInfo.

Llame siempre a la versión de clase base de OnEndPrintPreview desde la invalidación, normalmente al final de la función.

CView::OnInitialUpdate

Lo llama el marco después de adjuntar la vista al documento por primera vez, pero antes de que se muestre inicialmente la vista.

virtual void OnInitialUpdate();

Comentarios

La implementación predeterminada de esta función llama a la función miembro OnUpdate sin información de sugerencias (es decir, usando los valores predeterminados de 0 para el parámetro lHint y NULL para el parámetro pHint). Invalide esta función para realizar cualquier inicialización única que requiera información sobre el documento. Por ejemplo, si la aplicación tiene documentos de tamaño fijo, puede usar esta función para inicializar los límites de desplazamiento de una vista en función del tamaño del documento. Si la aplicación admite documentos de tamaño variable, use OnUpdate para actualizar los límites de desplazamiento cada vez que cambie el documento.

CView::OnPrepareDC

Lo llama el marco antes de llamar a la función miembro OnDraw para mostrar la pantalla y antes de que se llame a la función miembro OnPrint para cada página durante la impresión o vista previa de impresión.

virtual void OnPrepareDC(
    CDC* pDC,
    CPrintInfo* pInfo = NULL);

Parámetros

pDC
Apunta al contexto del dispositivo que se va a usar para representar una imagen del documento.

pInfo
Apunta a una estructura CPrintInfo que describe el trabajo de impresión actual si OnPrepareDC se llama para imprimir o para la vista previa de impresión; el miembro m_nCurPage especifica la página a punto de imprimirse. Este parámetro es NULL si OnPrepareDC se llama para mostrar la pantalla.

Comentarios

La implementación predeterminada de esta función no hace nada si se llama a la función para la pantalla. Sin embargo, esta función se invalida en clases derivadas, como CScrollView, para ajustar los atributos del contexto del dispositivo; por lo tanto, siempre debe llamar a la implementación de la clase base al principio de la invalidación.

Si se llama a la función para imprimir, la implementación predeterminada examina la información de página almacenada en el parámetro pInfo. Si no se ha especificado la longitud del documento, OnPrepareDC asume que el documento es de una página y detiene el bucle de impresión después de imprimir una página. La función detiene el bucle de impresión estableciendo el miembro m_bContinuePrinting de la estructura en FALSE.

Invalide OnPrepareDC por cualquiera de los siguientes motivos:

  • Para ajustar los atributos del contexto del dispositivo según sea necesario para la página especificada. Por ejemplo, si necesita establecer el modo de asignación u otras características del contexto del dispositivo, hágalo en esta función.

  • Para realizar la paginación en tiempo de impresión. Normalmente, se especifica la longitud del documento al comenzar la impresión mediante la función miembro OnPreparePrinting. Sin embargo, si no sabe con antelación la longitud del documento (por ejemplo, al imprimir un número no determinado de registros de una base de datos), invalide OnPrepareDC para realizar una prueba al final del documento mientras se imprime. Cuando no haya más páginas del documento que imprimir, establezca el miembro m_bContinuePrinting de la estructura CPrintInfo en FALSE.

  • Para enviar códigos de escape a la impresora página a página. Para enviar códigos de escape desde OnPrepareDC, llame a la función miembro Escape del parámetro pDC.

Llame a la versión de la clase base de OnPrepareDC al principio de la invalidación.

Ejemplo

void CMyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
   CView::OnPrepareDC(pDC, pInfo);

   // If we are printing, set the mapmode and the window
   // extent properly, then set viewport extent. Use the
   // SetViewportOrg member function in the CDC class to
   // move the viewport origin to the center of the view.

   if (pDC->IsPrinting()) // Is the DC a printer DC.
   {
      CRect rect;
      GetClientRect(&rect);

      pDC->SetMapMode(MM_ISOTROPIC);
      CSize ptOldWinExt = pDC->SetWindowExt(1000, 1000);
      ASSERT(ptOldWinExt.cx != 0 && ptOldWinExt.cy != 0);
      CSize ptOldViewportExt = pDC->SetViewportExt(rect.Width(), -rect.Height());
      ASSERT(ptOldViewportExt.cx != 0 && ptOldViewportExt.cy != 0);
      CPoint ptOldOrigin = pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
   }
}

CView::OnPreparePrinting

Lo llama el marco antes de imprimir u obtener una vista previa de un documento.

virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);

Parámetros

pInfo
Apunta a una estructura CPrintInfo que describe el trabajo de impresión actual.

Valor devuelto

Diferente a cero para empezar a imprimir; 0 si se ha cancelado el trabajo de impresión.

Comentarios

La implementación predeterminada no hace nada.

Debe invalidar esta función para habilitar la impresión y la vista previa de impresión. Llame a la función miembro DoPreparePrinting, pásela al parámetro pInfo y, a continuación, devuelva su valor devuelto; DoPreparePrinting muestra el cuadro de diálogo Imprimir y crea un contexto de dispositivo de impresora. Si quiere inicializar el cuadro de diálogo Imprimir con valores distintos de los valores predeterminados, asigne valores a los miembros de pInfo. Por ejemplo, si conoce la longitud del documento, pase el valor a la función miembro SetMaxPage de pInfo antes de llamar a DoPreparePrinting. Este valor se muestra en el cuadro Para: de la parte Intervalo del cuadro de diálogo Imprimir.

DoPreparePrinting no muestra el cuadro de diálogo Imprimir para un trabajo de vista previa. Si quiere omitir el cuadro de diálogo Imprimir de un trabajo de impresión, compruebe que el miembro m_bPreview de pInfo es FALSE y, a continuación, establézcalo en TRUE antes de pasarlo a DoPreparePrinting; después, restablézcalo a FALSE.

Si necesita realizar inicializaciones que requieran acceso al objeto CDC que representa el contexto del dispositivo de impresora (por ejemplo, si necesita conocer el tamaño de página antes de especificar la longitud del documento), invalide la función miembro OnBeginPrinting.

Si quiere establecer el valor de los miembros m_nNumPreviewPages o m_strPageDesc del parámetro pInfo, hágalo después de llamar a DoPreparePrinting. La función miembro DoPreparePrinting establece m_nNumPreviewPages en el valor que se encuentra en el archivo .INI de la aplicación y establece m_strPageDesc en su valor predeterminado.

Ejemplo

Invalide OnPreparePrinting y llame a DoPreparePrinting desde la invalidación para que el marco muestre un cuadro de diálogo Imprimir y cree automáticamente un controlador de dominio de impresora.

BOOL CMyEditView::OnPreparePrinting(CPrintInfo* pInfo)
{
   return CEditView::DoPreparePrinting(pInfo);
}

Si sabe cuántas páginas contiene el documento, establezca la página máxima en OnPreparePrinting antes de llamar a DoPreparePrinting. El marco mostrará el número máximo de páginas en el cuadro "Para" del cuadro de diálogo Imprimir.

BOOL CExampleView::OnPreparePrinting(CPrintInfo* pInfo)
{
   //The document has 2 pages.
   pInfo->SetMaxPage(2);
   return CView::DoPreparePrinting(pInfo);
}

CView::OnPrint

Lo llama el marco para imprimir u obtener una vista previa de una página del documento.

virtual void OnPrint(
    CDC* pDC,
    CPrintInfo* pInfo);

Parámetros

pDC
Apunta al contexto del dispositivo de impresora.

pInfo
Apunta a una estructura CPrintInfo que describe el trabajo de impresión actual.

Comentarios

Para cada página que se imprime, el marco llama a esta función inmediatamente después de llamar a la función miembro OnPrepareDC. La página que se va a imprimir está especificada por el miembro m_nCurPage de la estructura CPrintInfo a la que apunta pInfo. La implementación predeterminada llama a la función miembro OnDraw y la pasa al contexto del dispositivo de impresora.

Invalide esta función por cualquiera de los siguientes motivos:

  • Para permitir la impresión de documentos de varias páginas. Representar solo la parte del documento que corresponde a la página que se está imprimiendo actualmente. Si usa OnDraw para realizar la representación, puede ajustar el origen del área de visualización para que solo se imprima la parte adecuada del documento.

  • Para que la imagen impresa sea diferente de la imagen de pantalla (es decir, si la aplicación no es "lo que se ve es lo que se imprime"). En lugar de pasar el contexto del dispositivo de impresora a OnDraw, use el contexto del dispositivo para representar una imagen mediante atributos que no se muestran en la pantalla.

    Si necesita recursos de GDI para imprimir que no usa para la pantalla, selecciónelos en el contexto del dispositivo antes de dibujarlos y anule su selección después. Estos recursos de GDI deben asignarse en OnBeginPrinting y liberarse en OnEndPrinting.

  • Para implementar encabezados o pies de página. Puede seguir usando OnDraw para realizar la representación restringiendo el área en la que se puede imprimir.

Tenga en cuenta que el miembro m_rectDraw del parámetro pInfo describe el área imprimible de la página en unidades lógicas.

No llame a OnPrepareDC en la invalidación de OnPrint; el marco llama a OnPrepareDC automáticamente antes de llamar a OnPrint.

Ejemplo

A continuación se muestra un esqueleto para una función OnPrint invalidada:

void CMyView::OnPrint(CDC* pDC, CPrintInfo* pInfo)
{
   UNREFERENCED_PARAMETER(pInfo);

   // Print headers and/or footers, if desired.
   // Find portion of document corresponding to pInfo->m_nCurPage.
   OnDraw(pDC);
}

Para obtener otro ejemplo, vea CRichEditView::PrintInsideRect.

CView::OnScroll

Lo llama el marco para determinar si es posible desplazarse.

virtual BOOL OnScroll(
    UINT nScrollCode,
    UINT nPos,
    BOOL bDoScroll = TRUE);

Parámetros

nScrollCode
Código de barra de desplazamiento que indica la solicitud de desplazamiento del usuario. Este parámetro se compone de dos partes: un byte de orden bajo, que determina el tipo de desplazamiento que se produce horizontalmente y un byte de orden superior, que determina el tipo de desplazamiento que se produce verticalmente:

  • SB_BOTTOM Se desplaza hasta la parte inferior.

  • SB_LINEDOWN Se desplaza una línea hacia abajo.

  • SB_LINEUP Se desplaza una línea hacia arriba.

  • SB_PAGEDOWN Se desplaza una página hacia abajo.

  • SB_PAGEUP Se desplaza una página hacia arriba.

  • SB_THUMBTRACK Arrastra el cuadro de desplazamiento hasta la posición especificada. La posición actual se especifica en nPos.

  • SB_TOP Se desplaza hacia arriba.

nPos
Contiene la posición actual del cuadro de desplazamiento si el código de la barra de desplazamiento es SB_THUMBTRACK; de lo contrario, no se usa. En función del intervalo de desplazamiento inicial, nPos puede ser negativo y debe convertirse a un int si es necesario.

bDoScroll
Determina si realmente debe realizar la acción de desplazamiento especificada. Si es TRUE, se debe realizar el desplazamiento; si es FALSE, no debe producirse el desplazamiento.

Valor devuelto

Si bDoScroll es TRUE y la vista se ha desplazado realmente, devuelve un valor distinto de cero; en caso contrario, es 0. Si bDoScroll es FALSE, devuelve entonces el valor que habría devuelto si bDoScroll fuera TRUE, aunque realmente no realice el desplazamiento.

Comentarios

En un caso, el marco llama a esta función con bDoScroll establecido en TRUE en cuando la vista recibe un mensaje de la barra de desplazamiento. En este caso, debería desplazarse realmente por la vista. En el otro caso, se llama a esta función con bDoScroll establecida en FALSE cuando un elemento OLE se arrastra inicialmente a la región de desplazamiento automático de un destino de colocación antes de que se produzca realmente el desplazamiento. En este caso, no debería desplazarse realmente por la vista.

CView::OnScrollBy

Lo llama el marco cuando el usuario visualiza un área más allá de la vista actual del documento, ya sea arrastrando un elemento OLE en los bordes actuales de la vista o manipulando las barras de desplazamiento verticales u horizontales.

virtual BOOL OnScrollBy(
    CSize sizeScroll,
    BOOL bDoScroll = TRUE);

Parámetros

sizeScroll
Número de píxeles desplazados horizontal y verticalmente.

bDoScroll
Determina si se produce el desplazamiento de la vista. Si es TRUE, se realiza el desplazamiento; si es FALSE, no se produce el desplazamiento.

Valor devuelto

Distinto de cero si la vista fue capaz de desplazarse; de lo contrario, 0.

Comentarios

En las clases derivadas, este método comprueba si la vista se puede desplazar en la dirección en la que el usuario solicitó y, a continuación, actualiza la nueva región si es necesario. CWnd::OnHScroll y CWnd::OnVScroll llaman automáticamente a esta función para realizar la solicitud de desplazamiento real.

La implementación predeterminada de este método no cambia la vista, pero si no se llama, la vista no se desplazará en una clase derivada de CScrollView.

Si el ancho o alto del documento supera los 32 767 píxeles, se producirá un error al desplazarse más allá de 32 767 porque OnScrollBy se llama con un argumento sizeScroll no válido.

CView::OnUpdate

Lo llama el marco después de modificar el documento de la vista; CDocument::UpdateAllViews llama a esta función y permite que la vista actualice su presentación para reflejar esas modificaciones.

virtual void OnUpdate(
    CView* pSender,
    LPARAM lHint,
    CObject* pHint);

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 las modificaciones.

pHint
Apunta a un objeto que almacena información sobre las modificaciones.

Comentarios

También se llama mediante la implementación predeterminada de OnInitialUpdate. La implementación predeterminada invalida todo el área de cliente y la marca para el dibujo cuando se recibe el siguiente mensaje WM_PAINT. Invalide esta función si quiere actualizar solo las regiones que se asignan a las partes modificadas del documento. Para ello, debe pasar información sobre las modificaciones mediante los parámetros de sugerencia.

Para usar lHint, defina valores de sugerencia especiales, normalmente una máscara de bits o un tipo enumerado, y haga que el documento pase uno de estos valores. Para usar pHint, derive una clase de sugerencia de CObject y haga que el documento pase un puntero a un objeto de sugerencia; al invalidar OnUpdate, use la función miembro CObject::IsKindOf para determinar el tipo en tiempo de ejecución del objeto de sugerencia.

Normalmente, no debe realizar ningún dibujo directamente desde OnUpdate. En su lugar, determine el rectángulo que describe, en coordenadas del dispositivo, el área que requiere actualización; pase este rectángulo a CWnd::InvalidateRect. Esto hace que el dibujo se cree la próxima vez que se reciba un mensaje WM_PAINT.

Si lHint es 0 y pHint es NULL, el documento ha enviado una notificación de actualización genérica. Si una vista recibe una notificación de actualización genérica o si no puede descodificar las sugerencias, debe invalidar todo su área de cliente.

Consulte también

Ejemplo de MFCMDIDOCVW
CWnd (clase)
Gráfico de jerarquías
CWnd (clase)
CFrameWnd (clase)
CSplitterWnd (clase)
CDC (clase)
CDocTemplate (clase)
CDocument (clase)