Compartir vía


Funciones OLE de arrastrar y colocar

La característica de arrastrar y colocar de OLE es principalmente una función rápida de teclado para copiar y pegar datos. Cuando se usa el Portapapeles para copiar o pegar datos, se requieren varios pasos. Se deben seleccionar los datos, y elegir Cortar o Copiar en el menú Editar. Después, se mueven a la aplicación o ventana de destino y se coloca el cursor en la ubicación de destino. Por último, se elige Editar>Pegar en el menú.

La característica de arrastrar y colocar de 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. La opción de arrastrar y colocar en OLE es mucho más general. Permite arrastrar y colocar cualquier dato que también se pueda colocar en el Portapapeles.

Cuando se usa la opción arrastrar y colocar de OLE, se realizan dos pasos menos en el 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 soltarlos, 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 como el destino de colocación deben estar abiertos y, por lo menos, visibles parcialmente en la pantalla.

Mediante la opción de arrastrar y colocar de OLE, los datos se pueden transferir fácilmente de una ubicación a otra: en 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 colocación, un destino de colocación o ambos. Si una aplicación implementa la compatibilidad con el origen y con 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 es útil examinar los ejemplos OCLIENT e HIERSVR de OLE de MFC.

Implementación de un origen de colocació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 colocación es relativamente sencilla. El primer paso consiste en 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 cuando se produce un evento WM_LBUTTONDOWN en un punto dentro de algunos datos seleccionados. Los ejemplos OCLIENT e HIERSVR de OLE de MFC siguen estas instrucciones.

Si la aplicación es un contenedor y los datos seleccionados son un objeto vinculado o insertado de tipo COleClientItem, llame a su función miembro DoDragDrop. De lo contrario, construya un objeto COleDataSource, inicialícelo con la selección y llame a la función miembro DoDragDrop del objeto de origen de datos. Si la aplicación es un servidor, use COleServerItem::DoDragDrop. Para obtener información sobre cómo personalizar el comportamiento estándar de la opción arrastrar y colocar, vea 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 colocación.

Para obtener más información, vea 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 necesita un poco más de trabajo para implementar un destino de colocación que un origen de colocación, pero sigue siendo un proceso relativamente sencillo.

Implementación de un destino de colocación de OLE

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

  2. Agregue una variable miembro a cada vista de la aplicación que quiera que sea 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 WM_CREATE (normalmente OnCreate), llame a la nueva función miembro Register de la variable miembro. Se llamará automáticamente a Revoke cuando se destruya la vista.

  4. Invalide las funciones siguientes. Si quiere el mismo comportamiento en toda la aplicación, invalide estas funciones en la clase de vista. Si quiere modificar el comportamiento en casos aislados o quiere habilitar la colocación en ventanas que no sean de CView, invalide estas funciones en la clase derivada de COleDropTarget.

    Reemplazar Permitir
    OnDragEnter Operaciones de colocación que se van a producir en la ventana. Se llama cuando el cursor entra por primera vez en la ventana.
    OnDragLeave Comportamiento especial cuando la operación de arrastre sale de la ventana especificada.
    OnDragOver Operaciones de colocación que se van a producir en la ventana. Se llama cuando el cursor se arrastra por la ventana.
    OnDrop Control de los datos que se van a colocar en la ventana especificada.
    OnScrollBy Comportamiento especial para cuando el desplazamiento es necesario en la ventana de destino.

Vea el archivo MAINVIEW.CPP que forma parte del ejemplo OCLIENT de OLE de MFC para obtener un ejemplo de cómo funcionan conjuntamente estas funciones.

Para obtener más información, vea 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 la opción arrastrar y colocar

La implementación predeterminada de la característica de arrastrar y colocar es suficiente para la mayoría de las aplicaciones. Pero 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 colocación.

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

Opcionalmente, puede crear un objeto COleDropSource para controlar la colocación e invalidar algunas de sus funciones según el tipo de comportamiento que quiera cambiar. Después, este objeto de origen de colocación se pasa a COleDataSource::DoDragDrop para cambiar el comportamiento predeterminado de estas funciones. Estas opciones distintas 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 acerca de los orígenes de datos, vea el artículo Objetos de datos y orígenes de datos (OLE).

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

Reemplazar 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 diferentes de colocación.
QueryContinueDrag Finalización de una operación de arrastrar y colocar. Esta función permite comprobar los estados de las teclas modificadoras durante la operación de arrastre.

Consulte también

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