Condividi tramite


Metodo IStylusPlugin::InAirPackets (rtscom.h)

Notifica all'oggetto che implementa il plug-in che lo stilo si sposta sopra il digitalizzatore.

Sintassi

HRESULT InAirPackets(
  [in]      IRealTimeStylus  *piRtsSrc,
  [in]      const StylusInfo *pStylusInfo,
  [in]      ULONG            cPktCount,
  [in]      ULONG            cPktBuffLength,
  [in]      LONG             *pPackets,
  [in, out] ULONG            *pcInOutPkts,
  [in, out] LONG             **ppInOutPkts
);

Parametri

[in] piRtsSrc

Oggetto RealTimeStylus Class (RTS) che ha inviato la notifica.

[in] pStylusInfo

Struttura StylusInfo contenente le informazioni sull'RTS associato allo stilo.

[in] cPktCount

Numero di proprietà per pacchetto di dati.

[in] cPktBuffLength

Lunghezza, in byte, del buffer a cui punta pPackets. La memoria occupata da ogni pacchetto è (cPktBuffLength / cPktCount). I valori validi sono compresi tra 0 e 0x7FFF, inclusi.

[in] pPackets

Puntatore all'inizio dei dati del pacchetto. È di sola lettura.

[in, out] pcInOutPkts

Numero di LONG in ppInOutPkt.

[in, out] ppInOutPkts

Puntatore a una matrice di pacchetti di dati dello stilo modificati. Il plug-in può usare questo parametro per inserire i dati dei pacchetti modificati in pacchetti downstream. Per un valore diverso da NULL, RTS invierà questi dati ai plug-in usando il parametro pPacket .

Valore restituito

Per una descrizione dei valori restituiti, vedere Classi e interfacce - Analisi input penna.

Commenti

Questo metodo viene chiamato quando i pacchetti di dati vengono creati dallo stilo quando sono inclusi nell'intervallo, ma si spostano sopra il digitalizzatore e non toccano il digitalizzatore. È possibile restituire una matrice di pacchetti modificati usando il parametro ppInOutPkt . Creare un buffer e puntare ppInOutPkts al buffer. In tale posizione può essere presente un solo pacchetto.

Nota È possibile eliminare i pacchetti usati dal metodo IStylusPlugin::P ackets e dal metodo IStylusPlugin::InAirPackets .
 
Un plug-in stilo può essere associato a un singolo RTS o a molti. Usare il parametro piRtsSrc nei casi seguenti:
  • Quando la notifica richiede che il plug-in acquisisca altre informazioni sul digitalizzatore specifico da cui ha avuto origine la notifica.
  • Quando si inseriscono notifiche personalizzate aggiuntive tramite il sistema.
I pacchetti possono essere raggruppati per un trasferimento di dati più efficiente. Non è quindi necessario chiamare un plug-in una volta per ogni pacchetto. Metodo IStylusPlugin::InAirPackets e IStylusPlugin::P ackets possono inviare uno o più pacchetti.

Esempio

L'esempio di codice C++ seguente implementa un metodo IStylusPlugin::P ackets che modifica i dati X,Y per limitare i pacchetti a un rettangolo. Lo stesso codice può essere applicato a un'implementazione del metodo IStylusPlugin::InAirPackets.

STDMETHODIMP CPacketModifier::Packets( 
            /* [in] */ IRealTimeStylus *piRtsSrc,
            /* [in] */ const StylusInfo *pStylusInfo,
            /* [in] */ ULONG cPktCount,
            /* [in] */ ULONG cPktBuffLength,
            /* [size_is][in] */ LONG *pPackets,
            /* [out][in] */ ULONG *pcInOutPkts,
            /* [out][in] */ LONG **ppInOutPkts)
{
	BOOL fModified = FALSE;                             // Did we change the packet data?
	ULONG cPropertyCount = cPktBuffLength/cPktCount;    // # of properties in a packet
	ULONG iOtherProps = 0;                              // Properties other than X and Y

	// Allocate memory for modified packets
	LONG* pTempOutPkts = (LONG*)CoTaskMemAlloc(sizeof(ULONG)*cPktBuffLength);

	// For each packet in the packet data, check whether
	// its X,Y values fall outside of the specified rectangle.  
	// If so, replace them with the nearest point that still
	// falls within the rectangle.
	for (ULONG i = 0; i < cPktCount; i += cPropertyCount)
	{
		// Packet data always has X followed by Y 
		// followed by the rest
		LONG x = pPackets[i];
		LONG y = pPackets[i+1];

		// Constrain points to the input rectangle
		x = (x < m_filterRect.left ? m_filterRect.left : x);
		x = (x > m_filterRect.right ? m_filterRect.right : x);
		y = (y < m_filterRect.top ? m_filterRect.top : y);
		y = (y > m_filterRect.bottom ? m_filterRect.bottom : y);

		// If necessary, modify the X,Y packet data
		if ((x != pPackets[i]) || (y != pPackets[i+1]))
		{
			pTempOutPkts[i] = x;
			pTempOutPkts[i+1] = y;
			iOtherProps = i+2;
		
			// Copy the properties that we haven't modified
			while (iOtherProps < (i + cPropertyCount))
			{
				pTempOutPkts[iOtherProps] = pPackets[iOtherProps++];
			}

			fModified = TRUE;
		}
	}

	if (fModified)
	{
		// Set the [out] pointer to the 
		// memory we allocated and updated
		*ppInOutPkts = pTempOutPkts;
		*pcInOutPkts = cPktCount;
	}
	else
	{
		// Nothing modified, release the memory we allocated
		CoTaskMemFree(pTempOutPkts);
	}

	return S_OK;
}

Requisiti

Requisito Valore
Client minimo supportato Windows XP Tablet PC Edition [solo app desktop]
Server minimo supportato Nessuno supportato
Piattaforma di destinazione Windows
Intestazione rtscom.h
DLL RTSCom.dll

Vedi anche

IStylusAsyncPlugin

Interfaccia IStylusPlugin

Metodo IStylusPlugin::StylusDown

Metodo IStylusPlugin::StylusUp

IStylusSyncPlugin