Condividi tramite


Dati plug-in e classe RealTimeStylus

I plug-in per la classe RealTimeStylus devono implementare l'interfaccia IStylusSyncPlugin o IStylusAsyncPlugin o entrambi. Anche se è necessario implementare tutti i metodi di interfaccia plug-in, il plug-in riceve solo chiamate sui metodi contrassegnati nella proprietà Microsoft.StylusInput.IStylusSyncPlugin.DataInterest o Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest .

I metodi definiti nelle interfacce usano oggetti nello spazio dei nomi Microsoft.StylusInput.PluginData per passare i dati della penna ai plug-in. La tabella seguente descrive gli oggetti dati che sono parametri nei metodi di notifica ed elenca il valore DataInterestMask associato alla notifica.

Dati plug-in Valore DataInterestMask Descrizione
CustomStylusData CustomStylusDataAdded Dati dell'applicazione personalizzati aggiunti da un plug-in.
Errordata Error (Errore) (Error (Errore)e) Informazioni sull'errore aggiunte dall'oggetto RealTimeStylus in risposta a un'eccezione non gestita in uno dei relativi plug-in.
Inairpacketsdata InAirPackets Informazioni sui pacchetti per il movimento dello stilo mentre lo stilo è in aria sopra il digitalizzatore.
Packetsdata Pacchetti Informazioni sui pacchetti per il movimento dello stilo mentre lo stilo tocca il digitalizzatore.
RealTimeStylusDisabledData RealTimeStylusDisabled Informazioni sull'oggetto RealTimeStylus aggiunge quando viene disabilitato.
RealTimeStylusEnabledData RealTimeStylusEnabled Le informazioni sull'oggetto RealTimeStylus vengono aggiunte quando sono abilitate.
StylusButtonDownData StylusButtonDown Informazioni sul pulsante dello stilo specifico premuto.
StylusButtonUpData StylusButtonUp Informazioni sul pulsante dello stilo specifico che viene rilasciato.
StylusDownData Stylusdown Le informazioni sui pacchetti per uno stilo quando lo stilo viene portato in contatto con il digitalizzatore.
StylusInRangeData StiloInRange Informazioni sullo stilo specifico che sta immettendo l'area di input dell'oggetto RealTimeStylus o immettendo l'intervallo di rilevamento del digitalizzatore sopra l'area di input dell'oggetto RealTimeStylus .
StylusOutOfRangeData StylusOutOfRange Informazioni sullo stilo specifico che lascia l'area di input dell'oggetto RealTimeStylus o lascia l'intervallo di rilevamento del digitalizzatore sopra l'area di input dell'oggetto RealTimeStylus .
StiloUpData Stilo Informazioni sui pacchetti per uno stilo quando lo stilo viene sollevato dal digitalizzatore.
SystemGestureData SystemGesture Informazioni aggiunte dall'oggetto RealTimeStylus quando rileva un movimento di sistema.
TabletAddedData TabletAdded Informazioni sull'oggetto Tablet da aggiungere.
TabletRemovedData TabletRemoved Informazioni sull'oggetto Tablet da rimuovere.

 

Per informazioni su come l'oggetto RealTimeStylus gestisce il flusso di dati della penna del tablet, vedere Utilizzo della classe RealTimeStylus.

Interesse per i dati

L'oggetto RealTimeStylus controlla la proprietà Microsoft.StylusInput.IStylusSyncPlugin.DataInterest o Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest di un plug-in quando il plug-in viene aggiunto all'insieme sincrono o asincrono dell'oggetto RealTimeStylus . Pertanto, è consigliabile utilizzare la proprietà DataInterest per sottoscrivere tutte le notifiche usate da questa istanza del plug-in, ma non per nessuna delle notifiche mai usate da questa istanza del plug-in. Per le notifiche che il plug-in usa solo occasionalmente controlla lo stato del plug-in nel metodo di notifica e restituisce se la notifica non viene usata dal plug-in nello stato corrente.

Un plug-in riceve solo chiamate sui metodi contrassegnati nella proprietà Microsoft.StylusInput.IStylusSyncPlugin.DataInterest o Microsoft.StylusInput.IStylusAsyncPlugin.DataInterest del plug-in. Per altre informazioni sui possibili valori di una proprietà DataInterest di un plug-in, vedere l'enumerazione DataInterestMask .

Intervallo

I dati vengono accodati nell'oggetto RealTimeStylus prima che vengano passati ai plug-in nella raccolta di plug-in asincrona. Nell'elenco seguente vengono descritte alcune situazioni che potrebbero essere necessarie per la progettazione di un plug-in asincrono.

  • Quando l'oggetto RealTimeStylus è disabilitato, il plug-in asincrono può ricevere altre notifiche in coda prima che venga chiamato il metodo RealTimeStylusDisabled . In questo caso, le chiamate dal plug-in ad alcuni dei metodi e delle proprietà dell'oggetto RealTimeStylus generano un'eccezione. Le informazioni rilevanti per il plug-in devono essere memorizzate nella cache quando l'oggetto RealTimeStylus è abilitato.
  • Il metodo ClearStyluss dell'oggetto RealTimeStylusQueues può rimuovere informazioni dalla coda di output. Pertanto, i plug-in asincroni non possono basarsi sulla ricezione di tutte le notifiche pertinenti.
  • Quando viene rimosso un oggetto Tablet disponibile per l'oggetto RealTimeStylus , il plug-in asincrono può ricevere una notifica dello stilo in coda per il tablet prima che venga chiamato il relativo metodo TabletRemoved . In questo caso, la chiamata al metodo GetTabletPropertyDescriptionCollection dell'oggetto RealTimeSty non funziona. Le informazioni rilevanti per il plug-in devono essere memorizzate nella cache quando l'oggetto RealTimeStylus è abilitato o quando viene aggiunto un nuovo tablet.

A seconda dell'applicazione, è possibile migliorare le prestazioni quando si disabilita un oggetto RealTimeStylus . Quando la proprietà Enabled dell'oggetto RealTimeStylus è impostata su FALSE, i dati nelle code di input e di output vengono elaborati fino a quando le code non sono vuote. È possibile chiamare il metodo ClearStylusQueues dell'oggetto RealTimeStylus per cancellare le code prima di disabilitare l'oggetto RealTimeStylus.

Dati abilitati e disabilitati

Quando l'oggetto RealTimeStylus è abilitato, ogni plug-in riceve una chiamata al relativo metodo Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusEnabled o Microsoft.StylusInput.IStylusAsyncPlugin.RealTimeStylusEnabled . L'oggetto RealTimeStylusEnabledData passato nella notifica contiene una raccolta di identificatori di contesto per i tablet disponibili al momento dell'abilitazione dell'oggetto RealTimeStylus .

Nota

Poiché i dati plug-in per la raccolta di plug-in asincrona dell'oggetto RealTimeStylus vengono accodati, i plug-in asincroni possono ricevere dati prima di ricevere una chiamata al relativo metodo RealTimeStylusDisabled , ma dopo che l'oggetto RealTimeStylus è disabilitato. Si noti che alcuni dei metodi e delle proprietà dell'oggetto RealTimeStylus generano un'eccezione se l'oggetto RealTimeStylus è disabilitato.

 

L'oggetto RealTimeStylus chiama i metodi Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusEnabled e Microsoft.StylusInput.IStylusSyncPlugin.RealTimeStylusDisabled nel thread da cui è abilitato l'oggetto RealTimeStylus o da cui viene aggiunto il plug-in sincrono.

In genere, aggiungere o rimuovere plug-in mentre l'oggetto RealTimeStylus è disabilitato. Per altre informazioni sull'aggiunta e la rimozione di plug-in all'oggetto RealTimeStylus , vedere Plug-in e la classe RealTimeStylus.

Dati tablet

Quando un tablet che l'oggetto RealTimeStylus può utilizzare viene aggiunto o rimosso dal Tablet PC mentre l'oggetto RealTimeStylus è abilitato, l'oggetto RealTimeStylus notifica ai plug-in che un oggetto Tablet è stato aggiunto o rimosso. Ogni oggetto RealTimeStylus mantiene un elenco di identificatori univoci per gli oggetti Tablet con cui può interagire. L'oggetto RealTimeStylus include due metodi per la conversione tra l'identificatore univoco e l'oggetto Tablet, i metodi GetTabletContextIdFromTablet e GetTabletFromTabletContextId .

Nota

Le informazioni su un tablet non sono più disponibili dall'oggetto RealTimeStylus dopo la rimozione del tablet dal Tablet PC.

 

Dati penna tablet

L'oggetto RealTimeStylus passa informazioni sulla penna del tablet ai relativi plug-in in diversi metodi di notifica. Le informazioni sulla penna per tablet sono rappresentate da un oggetto Stilo . Questo oggetto è uno snapshot dello stato della penna del tablet al momento della raccolta dei dati. Poiché i plug-in ricevono i dati della penna del tablet come parte del flusso di dati della penna del tablet, i plug-in devono usare le informazioni nell'oggetto Stilo invece di verificare lo stato corrente di una particolare penna per tablet tramite la classe Cursor .

Ogni oggetto Stylus contiene l'identificatore del contesto del tablet per il tablet che ha generato i dati.

Dati movimenti di sistema

L'oggetto RealTimeStylus riceve i dati sui movimenti di sistema quando vengono riconosciuti dal Tablet PC. La tabella seguente descrive l'ordine in cui si verificano gli oggetti SystemGestureData nel flusso di dati della penna del tablet in relazione ad altri dati della penna del tablet.

SystemGesture Oggetti che precedono l'oggetto SystemGestureData Oggetti che vengono dopo l'oggetto SystemGestureData
Tocco Oggetto StylusDownData .
Oggetto StylusUpData .
DoubleTap Oggetto StylusDownData , l'oggetto SystemGestureData per il movimento di sistema Tap e gli oggetti StylusUpData .
Secondo oggetto StylusDownData .
RightTap Oggetto StylusDownData e l'oggetto SystemGestureData per il membro HoldEnter dell'enumerazione SystemGesure .
Oggetto StylusUpData .
Trascinamento Oggetto StylusDownData .
Oggetto StylusUpData .
RightDrag Oggetto StylusDownData .
Oggetto StylusUpData .
HoldEnter Oggetto StylusDownData .
Oggetto StylusUpData .
Nota: Questo movimento di sistema non viene riconosciuto se l'utente inizia un movimento di sistema Drag o RightDrag .
HoldLeave Non implementato.
Non implementato.
HoverEnter Diversi oggetti InAirPacketsData di velocità media bassa.
Nota: Potrebbe verificarsi un ritardo evidente prima di ricevere il movimento di sistema HoverEnter . L'oggetto RealTimeStylus riceve questi dati solo se l'oggetto RealTimeStylus è collegato alla finestra o al controllo direttamente sotto la penna al momento del movimento di sistema.
HoverLeave Oggetto SystemGestureData per il movimento di sistema HoverEnter e diversi oggetti InAirPacketsData di velocità media sufficiente.
Nota: Potrebbe verificarsi un ritardo evidente prima di ricevere il movimento di sistema HoverLeave . L'oggetto RealTimeStylus riceve questi dati solo se l'oggetto RealTimeStylus è collegato alla finestra o al controllo direttamente sotto la penna al momento del movimento di sistema.

 

Dati di stilo personalizzati

I dati di stilo personalizzati possono essere aggiunti all'oggetto RealTimeStylus chiamando il metodo AddCustomStylusDataToQueue . I dati di stilo personalizzati possono essere aggiunti alle code dell'oggetto RealTimeStylus in una delle tre posizioni.

  • Quando il parametro della coda è impostato su Output, i dati personalizzati vengono aggiunti alla coda di output dell'oggetto RealTimeStylus dopo l'elaborazione dei dati dalla raccolta plug-in sincrona.
  • Quando il parametro della coda è impostato su OutputImmediate, i dati personalizzati vengono aggiunti alla coda di output dell'oggetto RealTimeStylus prima dell'elaborazione dei dati dalla raccolta plug-in sincrona.
  • Quando il parametro della coda è impostato su Input, i dati personalizzati vengono aggiunti alla coda di input dell'oggetto RealTimeStylus e vengono inviati alla raccolta plug-in sincrona prima di nuovi dati dal flusso di dati della penna del tablet.

In ognuno dei casi precedenti, i dati aggiunti dai plug-in successivi nella raccolta plug-in sincrono vengono aggiunti dopo l'aggiunta dei dati dai plug-in precedenti.

Nota

Se la chiamata al metodo AddCustomStylusDataToQueue viene effettuata da un plug-in sincrono in risposta a una chiamata a uno dei metodi IStylusSyncPlugin , i dati dello stilo personalizzato vengono aggiunti al flusso di dati della penna tablet in modo prevedibile; in caso contrario, viene aggiunto alla coda in relazione ai dati della penna correnti che l'oggetto RealTimeStylus sta elaborando e non in relazione ai dati che il plug-in asincrono sta elaborando. Il metodo AddCustomStylusDataToQueue genera un'eccezione se l'oggetto RealTimeStylus è disabilitato.

 

I dati di stilo personalizzati vengono aggiunti alla coda come oggetto CustomStylusData e i plug-in ricevono questi dati tramite il relativo metodo Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded o Microsoft.StylusInput.IStylusAsyncPlugin.CustomStylusDataAdded .

Gli oggetti DynamicRenderer e GestureRecognizer possono aggiungere dati di stilo personalizzati alla coda. Per altre informazioni sugli oggetti DynamicRenderer e GestureRecognizer , vedere Plug-in Dynamic-Renderer e Plug-in Di riconoscimento.

L'oggetto RealTimeStylus chiama il metodo Microsoft.StylusInput.IStylusSyncPlugin.CustomStylusDataAdded nel thread da cui riceve la chiamata al relativo metodo AddCustomStylusDataToQueue .

Il diagramma seguente illustra l'aggiunta di dati di stilo personalizzati alla coda di output con il parametro di coda impostato su Output.

figura che mostra il flusso di dati dello stilo personalizzato nella coda di output

In questo diagramma i cerchi letterati "A" e "B" rappresentano i dati della penna tablet già aggiunti alla coda di output dell'oggetto RealTimeStylus e che non sono ancora stati inviati alla raccolta plug-in asincrona. Il cerchio letterato "C" rappresenta i dati della penna tablet attualmente elaborati dall'oggetto RealTimeStylus . Viene inviato alla raccolta plug-in sincrona e inserita nella coda di output. I cerchi numerati "1", "2" e "3" rappresentano rispettivamente dati di stilo personalizzati aggiunti alla coda di output dal primo, secondo e terzo plug-in sincrono rispettivamente in risposta ai dati della penna tablet rappresentati da "C". I plug-in hanno aggiunto i dati dello stilo personalizzato con il parametro della coda impostato su StylusQueues. Il cerchio vuoto rappresenta la posizione nella coda di output in cui vengono aggiunti i dati della penna tablet futuri.

Il diagramma seguente illustra l'aggiunta di dati di stilo personalizzati alla coda di output con il parametro di coda impostato su OutputImmediate.

Diagramma che mostra il flusso di dati dello stilo personalizzato nella coda di output.

In questo diagramma i cerchi letterati "A" e "B" rappresentano i dati della penna tablet già aggiunti alla coda di output dell'oggetto RealTimeStylus e che non sono ancora stati inviati alla raccolta plug-in asincrona. Il cerchio letterato "C" rappresenta i dati della penna tablet attualmente elaborati dall'oggetto RealTimeStylus . Viene inviato alla raccolta plug-in sincrona e inserita nella coda di output. I cerchi numerati "1", "2" e "3" rappresentano rispettivamente dati di stilo personalizzati aggiunti alla coda di output dal primo, secondo e terzo plug-in sincrono rispettivamente in risposta ai dati della penna tablet rappresentati da "C". I plug-in hanno aggiunto i dati di stilo personalizzati con il parametro della coda impostato su OutputImmediate. Il cerchio vuoto rappresenta la posizione nella coda di output in cui vengono aggiunti i dati della penna tablet futuri.

Il diagramma seguente illustra l'aggiunta di dati di stilo personalizzati alla coda di input.

figura che mostra il flusso di dati dello stilo personalizzato nella coda di output

In questo diagramma i cerchi letterati "A" e "B" rappresentano i dati della penna tablet già aggiunti alla coda di output dell'oggetto RealTimeStylus e che non sono ancora stati inviati alla raccolta plug-in asincrona. Il cerchio letterato "C" rappresenta i dati della penna tablet attualmente elaborati dall'oggetto RealTimeStylus . Viene inviato alla raccolta plug-in sincrona e inserita nella coda di output. I cerchi numerati "1", "2" e "3" rappresentano rispettivamente dati di stilo personalizzati aggiunti alla coda di input in base al primo, al secondo e al terzo plug-in sincrono rispettivamente in risposta ai dati della penna tablet rappresentati da "C". I plug-in hanno aggiunto i dati dello stilo personalizzato con il parametro della coda impostato su Input. I dati di stilo personalizzati numerati "1" vengono quindi passati ai plug-in sincroni e quindi alla coda di output prima che i dati di stilo personalizzati numerati "2" e "3", entrambi elaborati prima dell'elaborazione dei dati della penna del tablet successivo. Il cerchio vuoto rappresenta la posizione nella coda di output in cui vengono aggiunti i dati della penna tablet futuri.

Dati degli errori

Quando un plug-in genera un'eccezione, il normale flusso di dati viene interrotto. L'oggetto RealTimeStylus genera un oggetto ErrorData e chiama:

Se il plug-in che ha generato l'eccezione è un plug-in sincrono, l'oggetto ErrorData viene aggiunto alla coda di output. L'oggetto RealTimeStylus riprende quindi la normale elaborazione dei dati originali.

Il diagramma seguente illustra l'aggiunta di dati di errore ai dati della penna tablet.

flusso di dati dello stilo personalizzato nella coda di output con l'aggiunta di dati di errore

In questo diagramma i cerchi letterati "A" e "B" rappresentano i dati della penna tablet già aggiunti alla coda di output dell'oggetto RealTimeStylus e che non sono ancora stati inviati alla raccolta plug-in asincrona. Il cerchio letterato "C" rappresenta i dati della penna tablet attualmente elaborati dall'oggetto RealTimeStylus . Il cerchio letterato "e" rappresenta un oggetto ErrorData generato dall'oggetto RealTimeStylus quando il secondo plug-in sincrono, plug-in sincrono 2, genera un'eccezione durante l'elaborazione di "C". L'oggetto RealTimeStylus sospende quindi l'elaborazione di "C" e passa "e" al plug-in che ha generato l'eccezione e tutti i plug-in successivi. L'oggetto RealTimeStylus inserisce quindi "e" nella coda di output e riprende l'elaborazione di "C", che viene passata ai plug-in rimanenti nella raccolta plug-in sincrona e inserita nella coda di output dopo "e". Il cerchio vuoto rappresenta la posizione nella coda di output in cui vengono aggiunti i dati della penna tablet futuri.

Se un plug-in genera un'eccezione dal relativo metodo Error, l'oggetto RealTimeStylus rileva l'eccezione ma non genera un nuovo oggetto ErrorData . Si tratta di impedire la ricorsione.

I dati di errore vengono aggiunti alla coda di output dopo tutti i dati di stilo personalizzati aggiunti alla posizione outputImmediate prima dell'eccezione che ha creato i dati di errore e prima di eventuali dati di stilo personalizzati aggiunti alla posizione outputImmediate dai plug-in successivi nella raccolta plug-in sincrono.

Il diagramma seguente illustra come i dati di errore vengono aggiunti alla coda di output in relazione ai dati personalizzati aggiunti alla coda OutputImmediate .

dati di errore aggiunti alla coda di output in relazione ai dati personalizzati aggiunti alla coda outputimmediate.

In questo diagramma i cerchi letterati "A" e "B" rappresentano i dati della penna tablet già aggiunti alla coda di output dell'oggetto RealTimeStylus e che non sono ancora stati inviati alla raccolta plug-in asincrona. Il cerchio letterato "C" rappresenta i dati della penna tablet attualmente elaborati dall'oggetto RealTimeStylus . I cerchi numerati "1", "2" e "3" vengono aggiunti rispettivamente dal primo, secondo e terzo plug-in sincrono alla coda OutputImmediate in risposta ai dati rappresentati dal cerchio letterato "C". Il cerchio letterato "e" rappresenta i dati di errore generati in risposta a un'eccezione generata dal secondo plug-in dopo il secondo plug-in aggiunto dati personalizzati alla coda di output nella posizione OutputImmediate .

Se un plug-in sincrono aggiunge dati di stilo personalizzati alla coda di input in risposta ai dati degli errori, i dati vengono aggiunti immediatamente prima dei dati di errore. Se uno dei plug-in sincroni aggiunge dati di stilo personalizzati alla coda di output in risposta ai dati di errore, i dati vengono aggiunti immediatamente dopo i dati di errore.

L'oggetto RealTimeStylus chiama il metodo Microsoft.StylusInput.IStylusSyncPlugin.Error nel thread da cui viene generata l'eccezione.

Microsoft.Ink.Tablet

Microsoft.stylusinput.plugindata

Microsoft.StylusInput.DataInterestMask

Microsoft.StylusInput.RealTimeStylus

Uso della classe RealTimeStylus