Uso della classe RealTimeStylus
La classeRealTimeStylusfa parte delle API (Application Programming Interface) stylusInput. Le sezioni seguenti descrivono gli elementi chiave della classe RealTimeStylus e delle API StylusInput.
Creazione di un'istanza della classe RealTimeStylus
Quando si crea un oggetto RealTimeStylus, è possibile collegarlo a un handle di finestra o a un controllo. Per associare l'oggetto realTimeStylus a un handle di finestra sono necessarie autorizzazioni aggiuntive. Per altre informazioni su queste autorizzazioni, vedere Considerazioni sull'attendibilità parziale per le API StylusInput.
Nota
Non è possibile collegare l'oggettoRealTimeStylus a una finestra o a un controllo in un processo diverso.
Se si usa il costruttore predefinito, si crea un oggettorealTimeStylusche può accettare solo l'input da un altro oggetto RealTimeStylus. Per altre informazioni sulla connessione di due oggetti RealTimeStylus, vedere Il modello RealTimeStylus a cascata.
L'oggetto RealTimeStylus implementa l'interfaccia IDisposable.
Estensione della classe RealTimeStylus
Per consentire ai plug-in di interagire con il flusso di dati dalla penna del tablet, l'oggetto RealTimeStylus gestisce due raccolte plug-in, accessibili dal GetStylusSyncPlugin e dal GetStylusAsyncPluginPlugin metodi in C++ e dalle SyncPluginCollection e proprietà AsyncPluginCollection nel codice gestito. È possibile aggiungere un plug-in chiamando il metodo AddStylusSyncPlugin o il metodo AddStylusAsyncPlugin della collezione all'interno della proprietà appropriata. Per altre informazioni sulla creazione e l'uso di plug-in, vedere plug-in e la classe RealTimeStylus. Per informazioni su come decidere se creare un plug-in sincrono o asincrono per una determinata attività, vedere Considerazioni di threading per le API StylusInput e Considerazioni sulle prestazioni per le API StylusInput.
I plug-in sincroni devono implementare l'interfaccia IStylusSyncPlugin e i plug-in asincroni devono implementare l'interfaccia IStylusAsyncPlugin. Ogni plug-in ha una proprietà IStylusSyncPlugin.DataInterest o IStylusAsyncPlugin.DataInterest. L'oggetto RealTimeStylus chiama solo i metodi di notifica del plug-in per i metodi in cui è stato sottoscritto il plug-in. Per altre informazioni sui metodi di notifica, vedere Dati Plug-in e la Classe RealTimeStylus.
L'oggettoRealTimeStylus implementa l'interfacciaIStylusAsyncPlugin. L'unico modo per creare un'istanza di un oggetto RealTimeStylus che accetta input da un altro oggetto RealTimeStylus consiste nell'usare il costruttore predefinito e implementare il modello RealTimeStylus a catena. Per ulteriori informazioni sulla connessione di due oggetti RealTimeStylus, consultare il Modello RealTimeStylus a cascata.
L'oggetto RealTimeStylus contiene due code interne che contengono i dati della penna del tablet, la coda di input e la coda di output. I dati della penna vengono convertiti in istanze delle classi nello spazio dei nomi Microsoft.StylusInput.PluginData. Nell'elenco seguente viene descritto come l'oggetto RealTimeStylus gestisce i dati della penna del tablet.
- L'oggetto RealTimeStylus verifica innanzitutto la presenza di oggetti dati plug-in prima nella sua coda di input e quindi nel flusso di dati della penna del tablet.
- L'oggetto RealTimeStylus invia un oggetto dati plug-in agli oggetti nella sua raccolta plug-in sincrona. Ogni plug-in sincrono può aggiungere dati sia alla coda di input sia a quella di output.
- Dopo che l'oggetto dati plug-in è stato inviato a tutti i membri della raccolta plug-in sincrona, viene inserito nella coda di output dell'oggetto RealTimeStylus.
- L'oggetto RealTimeStylus quindi verifica la presenza dell'oggetto dati plug-in successivo da elaborare.
- Mentre la coda di output dell'oggetto RealTimeStylus contiene dati, l'oggetto RealTimeStylus invia un oggetto dati plug-in dalla sua coda di output agli oggetti nella sua raccolta di plug-in asincroni. Ogni plug-in asincrono può aggiungere dati alla coda di input o di output, ma poiché i plug-in asincroni vengono eseguiti nel thread dell'interfaccia utente (UI), i dati vengono aggiunti alla coda in relazione ai dati della penna che l'oggetto RealTimeStylus sta elaborando al momento, e non in relazione ai dati elaborati dal plug-in asincrono.
Il diagramma seguente illustra il flusso dei dati della penna del tablet attraverso l'oggetto RealTimeStylus e le relative raccolte plug-in.
In questo diagramma i cerchi contrassegnati "A" e "B" rappresentano i dati della penna del tablet già aggiunti alla RealTimeStylus coda dell'output dell'oggetto e che non sono ancora stati inviati alla raccolta asincrona di plug-in. Il cerchio contrassegnato con la lettera "C" rappresenta i dati della penna del tablet che l'oggetto RealTimeStylus sta attualmente elaborando. Viene inviata alla raccolta di plug-in sincronizzati e inserita nella coda di output. Il cerchio vuoto rappresenta la posizione nella coda di uscita dove si aggiungeranno i dati futuri della penna del tablet.
Per ulteriori informazioni su come i dati specifici vengono aggiunti alla coda e il loro processo, consultare Dati Plug-in e la Classe RealTimeStylus.
Di seguito è riportato uno scenario minimo per l'uso dell'oggetto RealTimeStylus in un modulo che raccoglie l'inchiostro.
- Creare un modulo che implementi l'interfaccia IStylusAsyncPlugin.
- Crea un RealTimeStylus oggetto collegato a un controllo nel modulo.
- Impostare l'interesse per le notifiche StylusDown, Packets e StylusUp nella proprietà IStylusAsyncPlugin.DataInterest del modulo.
- Nel modulo, nei metodi StylusDown, Pacchettie StylusUp, aggiungere codice per gestire le notifiche di StylusDown, Pacchetti, e StylusUp che sono inviate dall'oggetto RealTimeStylus del modulo.
Per un esempio di tale applicazione, vedere l'esempio di raccolta di inchiostro RealTimeStylus .
Utilizzo di oggetti tablet
Ogni oggetto RealTimeStylus abilitato mantiene un elenco di identificatori univoci per gli oggettitabletcon cui può interagire. L'oggetto RealTimeStylus espone due metodi per la conversione tra l'identificatore univoco e l'oggetto Tablet: il GetTabletContextIdFromTabletFromTablet e i metodi GetTabletFromTabletContextId.
L'oggetto TabletPropertyDescription (nel codice gestito) contiene una proprietà PacketPropertyId e una struttura TabletPropertyMetrics che descrive l'intervallo, la risoluzione e le unità della proprietà per un oggetto Tablet specifico. Il metodo GetDesiredPacketDescription dell'oggetto RealTimeStylus restituisce una matrice di identificatori univoci globali (GUID) per le proprietà del pacchetto che l'oggetto RealTimeStylus inoltra ai suoi plug-in quando tali proprietà di pacchetto sono disponibili. Per modificare il set di proprietà del pacchetto che l'oggetto RealTimeStylus passa ai suoi plug-in, chiamare il metodo SetDesiredPacketDescription dell'oggetto . Il metodo GetTabletPropertyDescriptionCollection (nel codice gestito) dell'oggetto RealTimeStylus accetta un identificatore di tablet univoco e restituisce un insieme di oggetti TabletPropertyDescription . Queste proprietà del pacchetto rappresentano il subset di proprietà supportate dal tablet restituito dal metodo GetDesiredPacketDescription.
Per un elenco dei GUID delle proprietà del pacchetto standard, vedere la classe PacketPropertyGuids Constants.
Considerazioni speciali
Nell'elenco seguente vengono descritti altri punti da prendere in considerazione quando si usa l'oggettoRealTimeStyluscon un oggetto Tablet.
- Il metodo SetDesiredPacketDescription può essere chiamato solo mentre l'oggetto Tablet è disabilitato. L'oggetto RealTimeStylus può modificare l'elenco delle proprietà del pacchetto desiderate; pertanto, chiamare il metodo GetDesiredPacketDescription dopo la chiamata al metodo SetDesiredPacketDescription per determinare quali proprietà del pacchetto l'oggetto RealTimeStylus può inoltrare ai plug-in. È garantito che un tablet supporti i soli valori X, Ye PacketStatus per PacketProperty. Pertanto, la progettazione del plug-in potrebbe dover tenere conto del fatto di ricevere un numero inferiore di proprietà dei pacchetti rispetto a quanto desiderato.
- Il metodo GetTabletPropertyDescriptionCollection (per il codice gestito) può essere chiamato solo mentre l'oggetto RealTimeStylus è abilitato. Poiché la notifica può essere inviata ai plug-in asincroni dopo che l'oggetto RealTimeStylus è stato disabilitato, potrebbe essere necessario memorizzare nella cache le informazioni per ogni oggetto Tablet. Il metodo GetTabletPropertyDescriptionCollection restituisce un elenco delle proprietà del pacchetto desiderate supportate dal tablet specificato.
- Quando l'oggetto RealTimeStylus è abilitato, ogni plug-in riceve una chiamata al relativo metodo 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.
- 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 oggettotabletè stato aggiunto o rimosso. Per altre informazioni, vedere Dati Plug-in e la Classe RealTimeStylus.
Uso delle penne per tablet
L'oggetto RealTimeStylus passa informazioni sulla penna del tablet ai plug-in in diversi metodi di notifica. Le informazioni sulla penna per tablet sono rappresentate da un oggetto Stilo, ottenuto tramite il metodo GetStyluses. Questo oggetto è una rappresentazione 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 utilizzare le informazioni nell'oggetto Stylus invece di verificare lo stato corrente di una particolare penna tablet tramite la classe Cursor. Per informazioni su come i dati della penna e del pulsante della penna siano trasmessi ai plug-in, vedere Dati plug-in e la classe RealTimeStylus.
Per ottenere una matrice degli oggetti Stylus che l'oggetto RealTimeStylus ha incontrato dall'ultima abilitazione, utilizzare il metodo GetStyluses dell'oggetto RealTimeStylus.
Argomenti correlati