Condividi tramite


Trascinamento della selezione OLE

La funzionalità di trascinamento della selezione di OLE è principalmente un collegamento per copiare e incollare i dati. Quando si usano gli Appunti per copiare o incollare i dati, sono necessari alcuni passaggi. Selezionare i dati e scegliere Taglia o Copia dal menu Modifica . Passare quindi all'app o alla finestra di destinazione e posizionare il cursore nella posizione di destinazione. Infine, scegliere Modifica>incolla dal menu.

La funzionalità di trascinamento della selezione OLE è diversa dal meccanismo di trascinamento della selezione di Gestione file. Gestione file può gestire solo i nomi file ed è progettato in modo specifico per passare nomi file alle applicazioni. Il trascinamento della selezione in OLE è molto più generale. Consente di trascinare e rilasciare tutti i dati che possono essere posizionati anche negli Appunti.

Quando si usa il trascinamento della selezione OLE, rimuovere due passaggi dal processo. Selezionare i dati dalla finestra di origine (l'origine di rilascio), quindi trascinarli nella destinazione (la "destinazione di rilascio"). La si rilascia rilasciando il pulsante del mouse. L'operazione elimina la necessità di menu ed è più veloce rispetto alla sequenza di copia/incolla. Esiste un solo requisito: sia l'origine di rilascio che la destinazione di rilascio devono essere aperte e almeno parzialmente visibili sullo schermo.

Usando il trascinamento della selezione OLE, i dati possono essere trasferiti facilmente da una posizione all'altra: all'interno di un documento, tra documenti diversi o tra applicazioni. Può essere implementato in un contenitore o in un'applicazione server. Qualsiasi applicazione può essere un'origine di rilascio, una destinazione di rilascio o entrambi. Se un'applicazione implementa sia il supporto per l'origine di rilascio che la destinazione di rilascio, è possibile trascinare e rilasciare tra finestre figlio o all'interno di una finestra. Questa funzionalità semplifica notevolmente l'uso dell'applicazione.

Gli articoli Oggetti dati e origini dati (OLE) illustrano come implementare il trasferimento dei dati nelle applicazioni. È anche utile esaminare gli esempi OLE MFC OCLIENT e HIERSVR.

Implementare un'origine di rilascio

Per ottenere l'applicazione per fornire dati a un'operazione di trascinamento della selezione, implementare un'origine di rilascio. L'implementazione di base di un'origine di rilascio è relativamente semplice. Il primo passaggio consiste nel determinare quali eventi iniziano un'operazione di trascinamento. Le linee guida dell'interfaccia utente consigliate definiscono l'inizio di un'operazione di trascinamento come quando si verifica un evento WM_LBUTTONDOWN in un punto all'interno di alcuni dati selezionati. Gli esempi OLE MFC OCLIENT e HIERSVR seguono queste linee guida.

Se l'applicazione è un contenitore e i dati selezionati sono collegati o un oggetto incorporato di tipo COleClientItem, chiamare la relativa DoDragDrop funzione membro. In caso contrario, costruire un COleDataSource oggetto, inizializzarlo con la selezione e chiamare la funzione membro dell'oggetto DoDragDrop origine dati. Se l'applicazione è un server, usare COleServerItem::DoDragDrop. Per informazioni sulla personalizzazione del comportamento standard di trascinamento della selezione, vedere la sezione Personalizzare il trascinamento della selezione.

Se DoDragDrop restituisce DROPEFFECT_MOVE, eliminare immediatamente i dati di origine dal documento di origine. Nessun altro valore restituito da DoDragDrop ha alcun effetto su un'origine di rilascio.

Per altre informazioni, vedere Oggetti dati OLE e origini dati: Creazione e distruzione e oggetti dati OLE e origini dati: Manipolazione.

Implementare una destinazione di rilascio

È necessario un po' più lavoro per implementare una destinazione di rilascio rispetto a un'origine di rilascio, ma è ancora relativamente semplice.

Per implementare una destinazione ole drop

  1. Se non è già presente, aggiungere una chiamata a AfxOleInit nella funzione membro dell'applicazione InitInstance . Questa chiamata è necessaria per inizializzare le librerie OLE.

  2. Aggiungere una variabile membro a ogni visualizzazione nell'applicazione che si vuole essere una destinazione di rilascio. Questa variabile membro deve essere di tipo COleDropTarget o di una classe derivata da essa.

  3. Dalla funzione della classe di visualizzazione che gestisce il messaggio WM_CREATE (in OnCreategenere ), chiamare la funzione membro della Register nuova variabile membro. Revoke verrà chiamato automaticamente quando la visualizzazione viene distrutta.

  4. Eseguire l'override delle funzioni seguenti. Se si vuole lo stesso comportamento in tutta l'applicazione, eseguire l'override di queste funzioni nella classe di visualizzazione. Se si vuole modificare il comportamento in casi isolati o si vuole abilitare l'eliminazione inCView finestre non, eseguire l'override di queste funzioni nella COleDropTargetclasse derivata da .

    Sostituzione Per consentire
    OnDragEnter Eliminare le operazioni da eseguire nella finestra. Chiamato quando il cursore entra per la prima volta nella finestra.
    OnDragLeave Comportamento speciale quando l'operazione di trascinamento lascia la finestra specificata.
    OnDragOver Eliminare le operazioni da eseguire nella finestra. Chiamato quando il cursore viene trascinato attraverso la finestra.
    OnDrop Gestione dei dati eliminati nella finestra specificata.
    OnScrollBy Comportamento speciale per quando lo scorrimento è necessario nella finestra di destinazione.

Vedere MAINVIEW. File CPP che fa parte dell'OCLIENT di esempio OLE MFC per un esempio di funzionamento di queste funzioni.

Per altre informazioni, vedere Oggetti dati OLE e origini dati: Creazione e distruzione e oggetti dati OLE e origini dati: Manipolazione.

Personalizzare il trascinamento della selezione

L'implementazione predefinita della funzionalità di trascinamento della selezione è sufficiente per la maggior parte delle applicazioni. Tuttavia, alcune applicazioni potrebbero richiedere di modificare questo comportamento standard. Questa sezione illustra i passaggi necessari per modificare queste impostazioni predefinite. È possibile usare questa tecnica per rendere le applicazioni che non supportano documenti composti in origini di rilascio.

Se si personalizza il comportamento di trascinamento della selezione OLE standard o si dispone di un'applicazione non OLE, è necessario creare un COleDataSource oggetto per contenere i dati. Quando l'utente inizia un'operazione di trascinamento della selezione, il codice deve chiamare la funzione DoDragDrop da questo oggetto anziché da altre classi che supportano le operazioni di trascinamento della selezione.

Facoltativamente, è possibile creare un oggetto COleDropSource per controllare il rilascio e per eseguire l'override di alcune funzioni a seconda del tipo di comportamento che si desidera modificare. Questo oggetto origine rilascio viene quindi passato a COleDataSource::DoDragDrop per modificare il comportamento predefinito di queste funzioni. Queste differenti opzioni offrono una grande flessibilità su come supportare le operazioni di trascinamento nell'applicazione che si sta sviluppando. Per altre informazioni sulle origini dati, vedere l'articolo Oggetti dati e origini dati (OLE).

È possibile eseguire l'override delle seguenti funzioni per personalizzare le operazioni di trascinamento e rilascio:

Sostituzione Per personalizzare
OnBeginDrag La modalità di avvio dell'operazione di trascinamento dopo la chiamata DoDragDropa .
GiveFeedback Feedback visivo, come appare il cursore, per risultati di rilascio diversi.
QueryContinueDrag Chiusura dell'operazione di trascinamento della selezione. Questa funzione consente di controllare gli stati dei tasti di modifica durante l'operazione di trascinamento.

Vedi anche

OLE
Oggetti e origini dati OLE Data
Oggetti dati OLE e origini dati: creazione e distruzione
Oggetti dati OLE e origini dati: Manipolazione
COleClientItem::D oDragDrop
Classe COleDataSource
COleDataSource::D oDragDrop
Classe COleDropSource
Classe COleDropTarget
CView::OnDragLeave