Método IStylusPlugin::P ackets (rtscom.h)
Notifica al objeto que implementa el complemento que el lápiz de tableta está moviendo en el digitalizador.
Sintaxis
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
);
Parámetros
[in] piRtsSrc
Objeto RealTimeStylus Class que envió la notificación.
[in] pStylusInfo
Estructura StylusInfo que contiene información sobre el RTS asociado al lápiz.
[in] cPktCount
Número de propiedades por paquete de datos.
[in] cPktBuffLength
Longitud, en bytes, del búfer al que apunta pPackets. La memoria ocupada por cada paquete es (cPktBuffLength / cPktCount). Los valores válidos son de 0 a 0x7FFF, ambos incluidos.
[in] pPackets
Puntero al inicio de los datos del paquete.
[in, out] pcInOutPkts
Número de LONG en ppInOutPkt.
[in, out] ppInOutPkts
Puntero a una matriz de paquetes de datos de lápiz óptico modificados. El complemento puede usar este parámetro para alimentar los datos modificados del paquete a los paquetes de bajada. Un valor distinto de NULL indica que RTS enviará estos datos a complementos mediante el parámetro pPacket .
Valor devuelto
Para obtener una descripción de los valores devueltos, vea RealTimeStylus Classes and Interfaces (Clases e interfaces de RealTimeStylus).
Comentarios
Se produce cuando el lápiz se mueve y está tocando la superficie del digitalizador. Use esta notificación para restringir los datos del paquete dentro de un rectángulo especificado. Los paquetes usados por los métodos IStylusPlugin::P ackets yIStylusPlugin::InAirPackets (Método) se pueden eliminar.
Puede devolver una matriz de paquetes modificados mediante el parámetro ppInOutPkt .
Los paquetes se pueden agrupar para que la transferencia de datos sea más eficaz, de modo que no sea necesario llamar a un complemento una vez por paquete. IStylusPlugin::InAirPackets (Método) e IStylusPlugin::P ackets (Método) pueden enviar uno o varios paquetes.
Ejemplos
El siguiente ejemplo de código de C++ implementa un método IStylusPlugin::P ackets Method que modifica los datos X,Y para restringir los paquetes a un rectángulo. Esta es la misma funcionalidad que se implementa en C# en el ejemplo del complemento 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;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP Tablet PC Edition [solo aplicaciones de escritorio] |
Servidor mínimo compatible | No se admite ninguno |
Plataforma de destino | Windows |
Encabezado | rtscom.h |
Archivo DLL | RTSCom.dll |
Consulte también
IStylusPlugin (Interfaz)
IStylusPlugin::StylusDown (Método)