Compartir a través de


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

Notifica al complemento de implementación que el usuario ha elevado el lápiz de tableta desde la superficie del digitalizador de tableta.

Sintaxis

HRESULT StylusUp(
  [in]      IRealTimeStylus  *piRtsSrc,
  [in]      const StylusInfo *pStylusInfo,
  [in]      ULONG            cPropCountPerPkt,
  [in]      LONG             *pPacket,
  [in, out] LONG             **ppInOutPkt
);

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.

[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 modificados del paquete a los paquetes de bajada. Un valor distinto de NULL indica que el paquete se ha modificado y 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

Este método se usa cuando el lápiz sale de la superficie del digitalizador.

Puede devolver una matriz de paquetes modificados en el búfer, ppInOutPkt. Los paquetes usados por los métodos IStylusPlugin::StylusUp yIStylusPlugin::StylusDown (Método) solo se pueden modificar. No se pueden eliminar. 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 actuales (DPP) disponibles en el dispositivo de entrada actual.

Para modificar paquetes, actualice los parámetros cPropCountPerPkt y ppInOutPkts . Cambie cPropCountPerPkt a un recuento de propiedades de paquete total válido y ppInOutPkts a un búfer de datos válido que contabiliza los valores de cada DPP de cada paquete. Solo puede haber 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 entran en para 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 plug-una vez por paquete.

Ejemplos

El siguiente ejemplo de código de C++ implementa un método StylusUp que llama a una función auxiliar, ModifyPacket, para cambiar el valor de los datos X,Y para que caiga 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::StylusUp( 
            /* [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

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)

IStylusSyncPlugin

RealTimeStylus (clase)