Partager via


Glisser-déposer OLE

La fonctionnalité glisser-déposer de l’OLE est essentiellement un raccourci pour copier et coller des données. Lorsque vous utilisez le Presse-papiers pour copier et coller des données, un certain nombre d'étapes sont nécessaires. Vous sélectionnez les données, puis sélectionnez Couper ou Copier dans le menu Modifier . Ensuite, vous passez à l’application ou à la fenêtre de destination, puis placez le curseur à l’emplacement cible. Enfin, vous choisissez Modifier>le collage dans le menu.

La fonctionnalité de glisser-déplacer OLE diffère du mécanisme de glisser-déplacer du Gestionnaire de fichiers. Le Gestionnaire de fichiers ne peut gérer que les noms de fichiers et est conçu spécifiquement pour transmettre des noms de fichiers aux applications. Le glisser-déplacer dans OLE est beaucoup plus général. Vous pouvez ainsi faire glisser toutes les données qui peuvent être placées dans le Presse-papiers.

Lorsque vous utilisez la fonction Glisser-déplacer OLE, vous supprimez deux étapes du processus. Vous sélectionnez les données dans la fenêtre source (la « source de dépôt »), puis faites-la glisser vers la destination (la « cible de déplacement »). Vous la déposez en libérant le bouton de la souris. L’opération élimine le besoin de menus, et elle est plus rapide que la séquence de copie/collage. Il n’existe qu’une seule exigence : la source de suppression et la cible de suppression doivent être ouvertes, et au moins partiellement visibles sur l’écran.

À l’aide du glisser-déplacer OLE, les données peuvent être transférées facilement d’un emplacement à un autre : dans un document, entre différents documents ou entre applications. Elle peut être implémentée dans un conteneur ou une application serveur. Toute application peut être une source de suppression, une cible de suppression ou les deux. Si une application implémente à la fois la prise en charge de la source de dépôt et de la cible déroulante, vous pouvez faire glisser-déplacer entre les fenêtres enfants ou dans une seule fenêtre. Cette fonctionnalité facilite considérablement l’utilisation de votre application.

Les objets de données et les sources de données (OLE) expliquent comment implémenter le transfert de données dans vos applications. Il est également utile d’examiner les exemples OLE MFC OCLIENT et HIERSVR.

Implémenter une source de suppression

Pour que votre application fournisse des données à une opération de glisser-déplacer, vous implémentez une source de dépôt. L’implémentation de base d’une source de suppression est relativement simple. La première étape consiste à déterminer les événements qui commencent une opération de glissement. Les instructions d’interface utilisateur recommandées définissent le début d’une opération de glisser comme lorsqu’un événement WM_LBUTTONDOWN se produit sur un point à l’intérieur de certaines données sélectionnées. Les exemples OLE MFC OCLIENT et HIERSVR suivent ces instructions.

Si votre application est un conteneur et que les données sélectionnées sont un objet lié ou incorporé de type COleClientItem, appelez sa DoDragDrop fonction membre. Sinon, construisez un COleDataSource objet, initialisez-le avec la sélection et appelez la fonction membre de l’objet source de DoDragDrop données. Si votre application est un serveur, utilisez COleServerItem::DoDragDrop. Pour plus d’informations sur la personnalisation du comportement de glisser-déplacer standard, consultez la section Personnaliser le glisser-déplacer.

Si DoDragDrop elle retourne DROPEFFECT_MOVE, supprimez immédiatement les données sources du document source. Aucune autre valeur de retour n’a DoDragDrop d’effet sur une source de suppression.

Pour plus d’informations, consultez objets de données OLE et sources de données : Création et destruction et objets de données OLE et sources de données : Manipulation.

Implémenter une cible de suppression

Il faut un peu plus de travail pour implémenter une cible de suppression qu’une source de suppression, mais il est encore relativement simple.

Pour implémenter une cible de suppression OLE

  1. Si ce n’est pas déjà fait, ajoutez un appel à AfxOleInit la fonction membre de InitInstance votre application. Cet appel est nécessaire pour initialiser les bibliothèques OLE.

  2. Ajoutez une variable membre à chaque vue de l’application que vous souhaitez être une cible de suppression. Cette variable membre doit être de type COleDropTarget ou une classe dérivée de celle-ci.

  3. À partir de la fonction de votre classe d’affichage qui gère le message WM_CREATE (généralement OnCreate), appelez la fonction membre de Register la nouvelle variable membre. Revoke sera appelé automatiquement pour vous lorsque votre vue est détruite.

  4. Remplacez les fonctions suivantes. Si vous souhaitez le même comportement dans votre application, remplacez ces fonctions dans votre classe d’affichage. Si vous souhaitez modifier le comportement dans des cas isolés ou si vous souhaitez activer la suppression sur des fenêtres non-windowsCView , remplacez ces fonctions dans votre COleDropTargetclasse dérivée.

    Remplacer Pour autoriser
    OnDragEnter Supprimer les opérations à effectuer dans la fenêtre. Appelé lorsque le curseur entre d’abord dans la fenêtre.
    OnDragLeave Comportement spécial lorsque l’opération de glisser quitte la fenêtre spécifiée.
    OnDragOver Supprimer les opérations à effectuer dans la fenêtre. Appelé lorsque le curseur est déplacé sur la fenêtre.
    OnDrop Gestion des données supprimées dans la fenêtre spécifiée.
    OnScrollBy Comportement spécial pour le défilement est nécessaire dans la fenêtre cible.

Consultez MAINVIEW. Fichier CPP qui fait partie de l’exemple OCLIENT OLE MFC pour obtenir un exemple de fonctionnement de ces fonctions.

Pour plus d’informations, consultez objets de données OLE et sources de données : Création et destruction et objets de données OLE et sources de données : Manipulation.

Personnaliser le glisser-déplacer

L’implémentation par défaut de la fonctionnalité glisser-déplacer est suffisante pour la plupart des applications. Toutefois, certaines applications peuvent vous obliger à modifier ce comportement standard. Cette section explique les étapes nécessaires pour modifier ces valeurs par défaut. Vous pouvez utiliser cette technique pour rendre les applications qui ne prennent pas en charge les documents composés en sources déroulantes.

Si vous personnalisez un comportement de glisser-déplacer OLE standard ou si vous disposez d’une application non OLE, vous devez créer un COleDataSource objet pour contenir les données. Lorsque l’utilisateur démarre une opération de glisser-déplacer, votre code doit appeler la DoDragDrop fonction à partir de cet objet au lieu d’autres classes qui prennent en charge les opérations de glisser-déplacer.

Si vous le souhaitez, vous pouvez créer un COleDropSource objet pour contrôler la suppression et remplacer certaines de ses fonctions en fonction du type de comportement que vous souhaitez modifier. Cet objet drop source est ensuite passé pour COleDataSource::DoDragDrop modifier le comportement par défaut de ces fonctions. Ces différentes options permettent une grande flexibilité dans la façon dont vous prenez en charge les opérations de glisser-déplacer dans votre application. Pour plus d’informations sur les sources de données, consultez l’article Objets de données et Sources de données (OLE) .

Vous pouvez remplacer les fonctions suivantes pour personnaliser les opérations de glisser-déplacer :

Remplacer Pour personnaliser
OnBeginDrag Comment l’opération de glissement commence après l’appel DoDragDrop.
GiveFeedback Commentaires visuels, tels que l’apparence du curseur, pour différents résultats de suppression.
QueryContinueDrag Arrêt d’une opération de glisser-déplacer. Cette fonction vous permet d’case activée états de touches de modificateur pendant l’opération de glisser.

Voir aussi

OLE
Objets et sources de données OLE
Objets et sources de données OLE : création et destruction
Objets de données OLE et sources de données : Manipulation
COleClientItem ::D oDragDrop
COleDataSource, classe
COleDataSource ::D oDragDrop
COleDropSource, classe
COleDropTarget, classe
CView ::OnDragLeave