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 |
---|---|
|
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 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 |