Share via


Metodo IOleInPlaceObjectWindowless::GetDropTarget (ocidl.h)

Recupera l'interfaccia IDropTarget per un oggetto attivo sul posto che supporta il trascinamento della selezione.

Sintassi

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

Parametri

[out] ppDropTarget

Puntatore a una variabile puntatore IDropTarget che riceve il puntatore dell'interfaccia all'oggetto senza finestra.

Valore restituito

Questo metodo restituisce S_OK se l'operazione ha esito positivo. Gli altri valori restituiti possibili includono i seguenti:

Codice restituito Descrizione
E_NOTIMPL
L'oggetto senza finestra non supporta il trascinamento della selezione.

Commenti

Un oggetto finestra registra l'interfaccia IDropTarget chiamando la funzione RegisterDragDrop e fornendo il relativo handle di finestra come parametro. La registrazione dell'interfaccia IDropTarget consente all'oggetto di partecipare alle operazioni di trascinamento della selezione. Poiché non dispone di una finestra quando è attiva, un oggetto senza finestra non può registrare l'interfaccia IDropTarget . Pertanto, non può partecipare direttamente alle operazioni di trascinamento della selezione senza il supporto del contenitore.

Gli eventi seguenti si verificano durante un'operazione di trascinamento della selezione che coinvolge oggetti senza finestra:

  • Il contenitore registra la propria interfaccia IDropTarget tramite la funzione RegisterDragDrop .
  • Nell'implementazione del contenitore dei propri metodi IDropTarget::D ragEnter o IDropTarget::D ragOver , il contenitore rileva se il puntatore del mouse ha appena immesso un oggetto incorporato.
  • Se l'oggetto è inattivo, il contenitore chiama il metodo IPointerInactive::GetActivationPolicy dell'oggetto. L'oggetto restituisce il flag POINTERINACTIVE_ACTIVATEONDRAG. Il contenitore attiva quindi l'oggetto sul posto. Se l'oggetto era già attivo, il contenitore non deve eseguire questo passaggio.
  • Dopo che l'oggetto è attivo, il contenitore deve quindi ottenere l'interfaccia IDropTarget dell'oggetto.
  • Un oggetto senza finestra che desidera essere una destinazione di rilascio implementa ancora l'interfaccia IDropTarget , ma non lo registra e non lo restituisce tramite chiamate a IUnknown::QueryInterface. Al contrario, il contenitore può ottenere questa interfaccia chiamando il metodo IOleInPlaceObjectWindowless::GetDropTarget dell'oggetto. L'oggetto restituisce un puntatore alla propria interfaccia IDropTarget se vuole partecipare alle operazioni di trascinamento della selezione. Il contenitore può memorizzare nella cache questo puntatore all'interfaccia per usarlo in un secondo momento. Ad esempio, nelle chiamate successive ai metodi IDropTarget::D ragEnter o IDropTarget::D ragLeave , il contenitore può usare il puntatore memorizzato nella cache anziché chiamare di nuovo il metodo GetDropTarget dell'oggetto.
  • Il contenitore chiama quindi IDropTarget::D ragEnter dell'oggetto e passa il valore restituito per pdwEffect dai propri metodi IDropTarget::D ragOver o IDropTarget::D ragEnter . Da questo punto in poi, il contenitore inoltra tutte le successive chiamate IDropTarget::D ragOver all'oggetto senza finestra finché il mouse non lascia l'oggetto o si verifica un rilascio sull'oggetto. Se il mouse lascia l'oggetto, il contenitore chiama l'interfaccia IDropTarget::D ragLeave dell'oggetto e quindi rilascia l'interfaccia IDropTarget dell'oggetto. Se si verifica l'eliminazione, il contenitore inoltra la chiamata IDropTarget::D rop all'oggetto .
  • Infine, il contenitore sul posto disattiva l'oggetto .
Un oggetto può restituire S_FALSE dal proprio IDropTarget::D ragEnter per indicare che non accetta alcun formato di dati nell'oggetto dati. In tal caso, il contenitore può decidere di accettare i dati per se stesso e restituire un oggetto dwEffect appropriato dai propri metodi IDropTarget::D ragEnter o IDropTarget::D ragOver .

È necessario preparare un oggetto che restituisce S_FALSE da IDropTarget::D ragEnter per ricevere chiamate successive a IDropTarget::D ragEnter senza alcun IDropTarget::D ragLeave . In effetti, se il mouse è ancora sullo stesso oggetto durante la chiamata successiva all'IDropTarget::D ragOver del contenitore, il contenitore può decidere di provare a chiamare nuovamente IDropTarget::D ragEnter sull'oggetto.

Note ai chiamanti

Un contenitore può memorizzare nella cache il puntatore all'interfaccia IDropTarget dell'oggetto per usarlo in un secondo momento.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione ocidl.h

Vedi anche

Idroptarget

IOleInPlaceObjectWindowless

IPointerInactive::GetActivationPolicy

RegisterDragDrop