Compartir a través de


Método IStylusPlugin::InAirPackets (rtscom.h)

Notifica al objeto que implementa el complemento que el lápiz óptico está moviendo por encima del digitalizador.

Sintaxis

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
);

Parámetros

[in] piRtsSrc

Objeto RealTimeStylus (Clase RTS) que envió la notificación.

[in] pStylusInfo

Estructura StylusInfo que contiene la información sobre el RTS asociado al lápiz óptico.

[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. Es de solo lectura.

[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. Para un valor distinto de NULL, RTS enviará estos datos a complementos mediante el parámetro pPacket .

Valor devuelto

Para obtener una descripción de los valores devueltos, vea Clases e interfaces : análisis de entrada de lápiz.

Comentarios

Se llama a este método cuando el lápiz óptico crea paquetes de datos cuando está en el rango, pero se mueve por encima del digitalizador y no toca el digitalizador. Puede devolver una matriz de paquetes modificados mediante el parámetro ppInOutPkt . Cree un búfer y apunte ppInOutPkts a él. Solo puede haber un paquete en esa ubicación.

Nota Los paquetes usados por los métodos IStylusPlugin::P ackets yIStylusPlugin::InAirPackets (Método) se pueden eliminar.
 
Un complemento de lápiz óptico puede estar asociado a un único RTS o a muchos. Use el parámetro piRtsSrc en los casos siguientes:
  • Cuando la notificación requiere que el complemento adquiera más información sobre el digitalizador específico desde el que se originó la notificación.
  • Cuando se introducen notificaciones personalizadas adicionales a través del sistema.
Los paquetes se pueden agrupar para una transferencia de datos más eficaz. Por lo tanto, no es 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. El mismo código se puede aplicar a una implementación de IStylusPlugin::InAirPackets (Método).

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

IStylusAsyncPlugin

IStylusPlugin (Interfaz)

IStylusPlugin::StylusDown (Método)

IStylusPlugin::StylusUp (Método)

IStylusSyncPlugin