Partager via


Méthode IOleInPlaceObjectWindowless ::GetDropTarget (ocidl.h)

Récupère l’interface IDropTarget pour un objet actif et sans fenêtre sur place qui prend en charge le glisser-déplacer.

Syntaxe

HRESULT GetDropTarget(
  [out] IDropTarget **ppDropTarget
);

Paramètres

[out] ppDropTarget

Pointeur vers une variable de pointeur IDropTarget qui reçoit le pointeur d’interface vers l’objet sans fenêtre.

Valeur retournée

Cette méthode retourne S_OK en cas de réussite. Les autres valeurs de retour possibles sont les suivantes.

Code de retour Description
E_NOTIMPL
L’objet sans fenêtre ne prend pas en charge le glisser-déplacer.

Remarques

Un objet fenêtré inscrit son interface IDropTarget en appelant la fonction RegisterDragDrop et en fournissant son handle de fenêtre en tant que paramètre. L’inscription de son interface IDropTarget permet à l’objet de participer à des opérations de glisser-déplacer. Étant donné qu’il n’a pas de fenêtre lorsqu’il est actif, un objet sans fenêtre ne peut pas inscrire son interface IDropTarget . Par conséquent, il ne peut pas participer directement aux opérations de glisser-déplacer sans prise en charge de son conteneur.

Les événements suivants se produisent lors d’une opération de glisser-déplacer impliquant des objets sans fenêtre :

  • Le conteneur inscrit sa propre interface IDropTarget via la fonction RegisterDragDrop .
  • Dans l’implémentation du conteneur de ses propres méthodes IDropTarget ::D ragEnter ou IDropTarget ::D ragOver , le conteneur détecte si le pointeur de la souris vient d’entrer un objet incorporé.
  • Si l’objet est inactif, le conteneur appelle la méthode IPointerInactive ::GetActivationPolicy de l’objet . L’objet retourne l’indicateur POINTERINACTIVE_ACTIVATEONDRAG. Le conteneur active ensuite l’objet sur place. Si l’objet était déjà actif, le conteneur n’a pas besoin d’effectuer cette étape.
  • Une fois l’objet actif, le conteneur doit obtenir l’interface IDropTarget de l’objet.
  • Un objet sans fenêtre qui souhaite être une cible de déplacement implémente toujours l’interface IDropTarget , mais ne l’enregistre pas et ne la retourne pas par le biais d’appels à IUnknown ::QueryInterface. Au lieu de cela, le conteneur peut obtenir cette interface en appelant la méthode IOleInPlaceObjectWindowless ::GetDropTarget de l’objet . L’objet retourne un pointeur vers sa propre interface IDropTarget s’il souhaite participer à des opérations de glisser-déplacer. Le conteneur peut mettre en cache ce pointeur d’interface pour une utilisation ultérieure. Par exemple, lors des appels suivants aux méthodes IDropTarget ::D ragEnter ou IDropTarget ::D ragLeave du conteneur, le conteneur peut utiliser le pointeur mis en cache au lieu d’appeler à nouveau la méthode GetDropTarget de l’objet.
  • Le conteneur appelle ensuite IDropTarget ::D ragEnter de l’objet et transmet la valeur retournée pour pdwEffect à partir de ses propres méthodes IDropTarget ::D ragOver ou IDropTarget ::D ragEnter . À partir de ce point, le conteneur transfère tous les appels IDropTarget ::D ragOver suivants à l’objet sans fenêtre jusqu’à ce que la souris quitte l’objet ou qu’une suppression se produise sur l’objet. Si la souris quitte l’objet, le conteneur appelle IDropTarget ::D ragLeave de l’objet, puis libère l’interface IDropTarget de l’objet. Si la suppression se produit, le conteneur transfère l’appel IDropTarget ::D rop à l’objet .
  • Enfin, le conteneur sur place désactive l’objet .
Un objet peut retourner S_FALSE à partir de son propre IDropTarget ::D ragEnter pour indiquer qu’il n’accepte aucun des formats de données dans l’objet de données. Dans ce cas, le conteneur peut décider d’accepter les données pour lui-même et de retourner un dwEffect approprié à partir de ses propres méthodes IDropTarget ::D ragEnter ou IDropTarget ::D ragOver .

Un objet qui renvoie S_FALSE de IDropTarget ::D ragEnter doit être prêt à recevoir des appels ultérieurs vers IDropTarget ::D ragEnter sans IDropTarget ::D ragLeave entre les deux. En effet, si la souris est toujours sur le même objet lors de l’appel suivant à IDropTarget ::D ragOver du conteneur, le conteneur peut décider d’essayer d’appeler à nouveau IDropTarget ::D ragEnter sur l’objet .

Remarques aux appelants

Un conteneur peut mettre en cache le pointeur vers l’interface IDropTarget de l’objet pour une utilisation ultérieure.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête ocidl.h

Voir aussi

IDropTarget

IOleInPlaceObjectWindowless

IPointerInactive ::GetActivationPolicy

RegisterDragDrop