Compartir a través de


Arrastrar y colocar OLE

La característica de arrastrar y colocar de OLE es principalmente un acceso directo para copiar y pegar datos. Cuando se usa el Portapapeles para copiar o pegar datos, se requieren varios pasos. Seleccione los datos y elija Cortar o Copiar en el menú Editar . A continuación, se mueve a la aplicación o ventana de destino y coloca el cursor en la ubicación de destino. Por último, elija Editar>pegar en el menú.

La característica de arrastrar y colocar OLE es diferente del mecanismo de arrastrar y colocar del Administrador de archivos. El Administrador de archivos solo puede controlar los nombres de archivo y está diseñado específicamente para pasar nombres de archivo a las aplicaciones. Arrastrar y colocar en OLE es mucho más general. Permite arrastrar y colocar los datos que también se pueden colocar en el Portapapeles.

Cuando use arrastrar y colocar OLE, quite dos pasos del proceso. Seleccione los datos de la ventana de origen (el "origen de colocación") y arrástrelos al destino (el "destino de colocación"). Para soltarlo, suelte el botón del mouse. La operación elimina la necesidad de menús y es más rápida que la secuencia de copia y pegado. Solo hay un requisito: tanto el origen de colocación como el destino de colocación deben estar abiertos y al menos parcialmente visibles en la pantalla.

Mediante la función de arrastrar y colocar OLE, los datos se pueden transferir fácilmente desde una ubicación a otra: dentro de un documento, entre diferentes documentos o entre aplicaciones. Se puede implementar en un contenedor o en una aplicación de servidor. Cualquier aplicación podría ser un origen de eliminación, un destino de colocación o ambos. Si una aplicación implementa compatibilidad con el origen y el destino de colocación, puede arrastrar y colocar entre ventanas secundarias o dentro de una ventana. Esta característica facilita mucho el uso de la aplicación.

En los artículos Objetos de datos y orígenes de datos (OLE) se explica cómo implementar la transferencia de datos en las aplicaciones. También resulta útil examinar los ejemplos OLE de MFC OCLIENT y HIERSVR.

Implementación de un origen de eliminación

Para que la aplicación proporcione datos a una operación de arrastrar y colocar, implemente un origen de colocación. La implementación básica de un origen de eliminación es relativamente sencilla. El primer paso es determinar qué eventos comienzan una operación de arrastre. Las directrices recomendadas de la interfaz de usuario definen el principio de una operación de arrastre como cuando se produce un evento WM_LBUTTONDOWN en un punto dentro de algunos datos seleccionados. Los ejemplos OLE de MFC OCLIENT y HIERSVR siguen estas instrucciones.

Si la aplicación es un contenedor y los datos seleccionados son un objeto vinculado o incrustado de tipo COleClientItem, llame a su DoDragDrop función miembro. De lo contrario, construya un COleDataSource objeto, inicialícelo con la selección y llame a la función miembro del objeto de origen de DoDragDrop datos. Si la aplicación es un servidor, use COleServerItem::DoDragDrop. Para obtener información sobre cómo personalizar el comportamiento estándar de arrastrar y colocar, consulte la sección Personalización de arrastrar y colocar.

Si DoDragDrop devuelve DROPEFFECT_MOVE, elimine inmediatamente los datos de origen del documento de origen. Ningún otro valor devuelto de DoDragDrop tiene ningún efecto en un origen de eliminación.

Para obtener más información, consulte Objetos de datos OLE y orígenes de datos: Creación y destrucción y objetos de datos OLE y orígenes de datos: Manipulación.

Implementación de un destino de colocación

Se tarda un poco más en implementar un destino de eliminación que un origen de eliminación, pero sigue siendo relativamente sencillo.

Para implementar un destino de colocación OLE

  1. Si aún no está allí, agregue una llamada a AfxOleInit en la función miembro de la InitInstance aplicación. Esta llamada es necesaria para inicializar las bibliotecas OLE.

  2. Agregue una variable miembro a cada vista de la aplicación que quiera ser un destino de colocación. Esta variable miembro debe ser de tipo COleDropTarget o una clase derivada de ella.

  3. Desde la función de la clase de vista que controla el mensaje de WM_CREATE (normalmente OnCreate), llame a la función miembro de Register la nueva variable miembro. Revoke se le llamará automáticamente cuando se destruya la vista.

  4. Invalide las siguientes funciones. Si desea el mismo comportamiento en toda la aplicación, invalide estas funciones en la clase view. Si desea modificar el comportamiento en casos aislados o desea habilitar la colocación en ventanas que noCView son ventanas, invalide estas funciones en la COleDropTargetclase derivada.

    Invalidar Para permitir
    OnDragEnter Quite las operaciones que se van a producir en la ventana. Se llama cuando el cursor entra primero en la ventana.
    OnDragLeave Comportamiento especial cuando la operación de arrastre deja la ventana especificada.
    OnDragOver Quite las operaciones que se van a producir en la ventana. Se llama cuando se arrastra el cursor a través de la ventana.
    OnDrop Control de los datos que se quitan en la ventana especificada.
    OnScrollBy Comportamiento especial para cuando el desplazamiento es necesario en la ventana de destino.

Consulte MAINVIEW. Archivo CPP que forma parte del OCLIENT de ejemplo OLE de MFC para obtener un ejemplo de cómo funcionan estas funciones juntas.

Para obtener más información, consulte Objetos de datos OLE y orígenes de datos: Creación y destrucción y objetos de datos OLE y orígenes de datos: Manipulación.

Personalización de arrastrar y colocar

La implementación predeterminada de la característica de arrastrar y colocar es suficiente para la mayoría de las aplicaciones. Sin embargo, algunas aplicaciones pueden requerir que cambie este comportamiento estándar. En esta sección se explican los pasos necesarios para cambiar estos valores predeterminados. Puede usar esta técnica para crear aplicaciones que no admitan documentos compuestos en orígenes de eliminación.

Si va a personalizar el comportamiento estándar de arrastrar y colocar OLE o tiene una aplicación que no es OLE, debe crear un COleDataSource objeto para contener los datos. Cuando el usuario inicia una operación de arrastrar y colocar, el código debe llamar a la DoDragDrop función desde este objeto en lugar de desde otras clases que admitan operaciones de arrastrar y colocar.

Opcionalmente, puede crear un COleDropSource objeto para controlar la eliminación e invalidar algunas de sus funciones en función del tipo de comportamiento que desee cambiar. A continuación, este objeto drop-source se pasa a COleDataSource::DoDragDrop para cambiar el comportamiento predeterminado de estas funciones. Estas diferentes opciones permiten una gran flexibilidad en la forma en que se admiten las operaciones de arrastrar y colocar en la aplicación. Para obtener más información sobre los orígenes de datos, consulte el artículo Objetos de datos y orígenes de datos (OLE).

Puede invalidar las siguientes funciones para personalizar las operaciones de arrastrar y colocar:

Invalidar Para personalizar
OnBeginDrag Cómo comienza la operación de arrastre después de llamar a DoDragDrop.
GiveFeedback Comentarios visuales, como la apariencia del cursor, para obtener resultados de eliminación diferentes.
QueryContinueDrag Terminación de una operación de arrastrar y colocar. Esta función permite comprobar los estados de clave modificador durante la operación de arrastre.

Consulte también

OLE
Objetos de datos OLE y orígenes de datos
Objetos de datos OLE y orígenes de datos: creación y destrucción
Objetos de datos OLE y orígenes de datos: Manipulación
COleClientItem::D oDragDrop
COleDataSource (clase)
COleDataSource::D oDragDrop
COleDropSource (clase)
COleDropTarget (clase)
CView::OnDragLeave