Metodo IStylusPlugin::P ackets (rtscom.h)
Notifica all'oggetto che implementa il plug-in che la penna del tablet si sta spostando sul digitalizzatore.
Sintassi
HRESULT Packets(
[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 Classe RealTimeStylus che ha inviato la notifica.
[in] pStylusInfo
Struttura StylusInfo che contiene informazioni sull'RTS associato alla penna.
[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.
[in, out] pcInOutPkts
Numero di LONGs in ppInOutPkt.
[in, out] ppInOutPkts
Puntatore a una matrice di pacchetti di dati stilo modificati. Il plug-in può usare questo parametro per inviare i dati dei pacchetti modificati ai pacchetti downstream. Un valore diverso da NULL indica che rtS invierà questi dati ai plug-in usando il parametro pPacket .
Valore restituito
Per una descrizione dei valori restituiti, vedere Classi e interfacce RealTimeStylus.
Commenti
Si verifica quando la penna si sposta e tocca la superficie del digitalizzatore. Usare questa notifica per limitare i dati dei pacchetti all'interno di un rettangolo specificato. I pacchetti usati dai metodi IStylusPlugin::P ackets e IStylusPlugin::InAirPackets possono essere eliminati.
È possibile restituire una matrice di pacchetti modificati usando il parametro ppInOutPkt .
I pacchetti possono essere raggruppati per rendere più efficiente il trasferimento dei dati, in modo che un plug-in non sia necessario chiamare una sola volta per ogni pacchetto. Metodo IStylusPlugin::InAirPackets e IStylusPlugin::P ackets può 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. Questa è la stessa funzionalità implementata in C# nell'esempio di plug-in RealTimeStylus.
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
Interfaccia IStylusPlugin
Metodo IStylusPlugin::StylusDown