Método IStylusPlugin::StylusDown (rtscom.h)
Notifica al complemento de implementación que el lápiz de tableta ha tocado la superficie del digitalizador.
Sintaxis
HRESULT StylusDown(
[in] IRealTimeStylus *piRtsSrc,
[in] const StylusInfo *pStylusInfo,
[in] ULONG cPropCountPerPkt,
[in] LONG *pPacket,
[in, out] LONG **ppInOutPkt
);
Parámetros
[in] piRtsSrc
Objeto De clase RealTimeStylus (RTS) que envió la notificación.
[in] pStylusInfo
Estructura StylusInfo que contiene la información sobre el RTS asociado al lápiz óptico.
[in] cPropCountPerPkt
Número de propiedades por paquete. Los valores válidos son de 0 a 32, ambos incluidos.
[in] pPacket
Inicio de los datos del paquete.
[in, out] ppInOutPkt
Puntero al paquete de datos de lápiz óptico modificado. El complemento puede usar este parámetro para alimentar los datos de paquetes modificados a los paquetes de bajada. Un valor distinto de NULL indica que el paquete se ha modificado y RTS enviará estos datos a los complementos mediante el parámetro pPacket .
Valor devuelto
Para obtener una descripción de los valores devueltos, Clases e interfaces RealTimeStylus.
Comentarios
Puede devolver una matriz de paquetes modificados en el búfer, ppInOutPkt. Los paquetes usados por el método IStylusPlugin::StylusUp y los métodos IStylusPlugin::StylusDown Método solo se pueden cambiar. Los paquetes usados por los métodos IStylusPlugin::P ackets yIStylusPlugin::InAirPackets (Método) se pueden eliminar.
Si modifica paquetes, cPropCountPerPkt, que es el número de LONG en ppInOutPkt, debe ser divisible por las propiedades de paquete deseadas (DPP) actuales disponibles en el dispositivo de entrada actual.
Puede modificar paquetes actualizando los parámetros cPropCountPerPkt y ppInOutPkts . Cambie cPropCountPerPkt a un recuento de propiedades de paquete total válido y cambie ppInOutPkts a puntero a un búfer de datos válido que tiene en cuenta los valores de cada DPP de cada paquete. Solo se puede presentar un paquete en esa ubicación para IStylusPlugin::StylusUp (Método) e IStylusPlugin::StylusDown (Método).
Por ejemplo, si agrega tres paquetes y su DPP es actualmente X, Y y Pressure, debe tener nueve valores LONG en este búfer y establecer cPropCountPerPkt en 9.
El valor cPropCountPerPkt es útil para ayudar a aclarar los límites entre los paquetes de la matriz plana de enteros que se incluyen en eventos como el evento NewPackets Event . Los paquetes se pueden agrupar para ser más eficientes con la transferencia de datos, de modo que no sea necesario que se llame a un complemento una vez por paquete.
Ejemplos
El siguiente ejemplo de código de C++ implementa un método StylusDown que llama a una función auxiliar, ModifyPacket, para cambiar el valor de los datos X,Y para que se encuentre dentro de un rectángulo especificado. Esta es la misma funcionalidad que se implementa en el ejemplo de C#, RealTimeStylus Plug-in Sample. El segundo fragmento de código es la función ModifyPacket .
STDMETHODIMP CPacketModifier::StylusDown(
/* [in] */ IRealTimeStylus *piRtsSrc,
/* [in] */ const StylusInfo *pStylusInfo,
/* [in] */ ULONG cPropCountPerPkt,
/* [size_is][in] */ LONG *pPacket,
/* [out][in] */ LONG **ppInOutPkt)
{
return ModifyPacket(cPropCountPerPkt, pPacket, ppInOutPkt);
}
// Helper method to modify a single packet
// Called from StylusDown() and StylusUp()
HRESULT CPacketModifier::ModifyPacket(
/* [in] */ ULONG cPropCountPerPkt,
/* [size_is][in] */ LONG *pPacket,
/* [out][in] */ LONG **ppInOutPkt)
{
// Pointer to a buffer to hold changed packet values
LONG* pTempOutPkt = NULL;
// X and Y come first (0 and 1),
// other properties follow
ULONG iOtherProps = 2;
if (cPropCountPerPkt > 0)
{
pTempOutPkt = (LONG*)CoTaskMemAlloc(sizeof(LONG)*cPropCountPerPkt);
if (NULL != pTempOutPkt)
{
// Packet data always has x followed by y followed by the rest.
LONG x = pPacket[0];
LONG y = pPacket[1];
// 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.
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 != pPacket[0]) || (y != pPacket[1]))
{
pTempOutPkt[0] = x;
pTempOutPkt[1] = y;
// Copy the properties that we haven't modified
while (iOtherProps < cPropCountPerPkt)
{
pTempOutPkt[iOtherProps] = pPacket[iOtherProps++];
}
*ppInOutPkt = pTempOutPkt;
}
else
{
CoTaskMemFree(pTempOutPkt);
}
}
}
return S_OK;
}
Requisitos
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)