Partager via


IStylusPlugin ::StylusUp, méthode (rtscom.h)

Avertit le plug-in d’implémentation que l’utilisateur a levé le stylet de tablette à partir de la surface du numériseur de tablette.

Syntaxe

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

Paramètres

[in] piRtsSrc

Objet RTS (RealTimeStylus Class ) qui a envoyé la notification.

[in] pStylusInfo

Structure StylusInfo contenant les informations sur le RTS associé au stylet.

[in] cPropCountPerPkt

Nombre de propriétés par paquet. Les valeurs valides sont comprises entre 0 et 32, inclus.

[in] pPacket

Début des données de paquet.

[in, out] ppInOutPkt

Pointeur vers le paquet de données du stylet modifié. Le plug-in peut utiliser ce paramètre pour alimenter les données de paquet modifiées dans les paquets en aval. Une valeur autre que NULL indique que le paquet a été modifié et RTS envoie ces données aux plug-ins à l’aide du paramètre pPacket .

Valeur retournée

Pour obtenir une description des valeurs de retour, consultez Classes et interfaces RealTimeStylus.

Remarques

Cette méthode est utilisée lorsque le stylet quitte la surface du numériseur.

Vous pouvez retourner un tableau de paquets modifiés dans la mémoire tampon, ppInOutPkt. Les paquets utilisés par les méthodes IStylusPlugin ::StylusUp etIStylusPlugin ::StylusDown Method ne peuvent être modifiés que. Ils ne peuvent pas être supprimés. Les paquets utilisés par les méthodes IStylusPlugin ::P ackets etIStylusPlugin ::InAirPackets Peuvent être supprimés .

Si vous modifiez des paquets, cPropCountPerPkt, qui correspond au nombre de LONGs dans ppInOutPkt, doit être divisible par les propriétés de paquets souhaitées (DPP) actuelles disponibles sur l’appareil d’entrée actuel.

Vous modifiez les paquets en mettant à jour les paramètres cPropCountPerPkt et ppInOutPkts . Remplacez cPropCountPerPkt par un nombre total valide de propriétés de paquets et ppInOutPkts par une comptabilité de mémoire tampon de données valide pour les valeurs de chaque DPP dans chaque paquet. Un seul paquet peut être présent à cet emplacement pour la méthode IStylusPlugin ::StylusUp et la méthode IStylusPlugin ::StylusDown.

Par exemple, si vous ajoutez trois paquets et que votre DPP est actuellement X, Y et Pressure, vous devez avoir neuf valeurs LONG dans cette mémoire tampon et définir cPropCountPerPkt sur 9.

La valeur cPropCountPerPkt est utile pour clarifier les limites entre les paquets dans le tableau plat d’entiers fourni pour des événements tels que l’événement Événement NewPackets . Les paquets peuvent être regroupés afin d’être plus efficaces avec le transfert de données, de sorte qu’il n’est pas nécessaire qu’un plug-in soit appelé une fois par paquet.

Exemples

L’exemple de code C++ suivant implémente une méthode StylusUp qui appelle une fonction d’assistance, ModifyPacket, pour modifier la valeur des données X,Y afin qu’elles se trouvent dans un rectangle spécifié. Il s’agit de la même fonctionnalité qui est implémentée dans l’exemple C#, Exemple de plug-in RealTimeStylus. Le deuxième extrait de code est la fonction 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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP Édition Tablet PC [applications de bureau uniquement]
Serveur minimal pris en charge Aucun pris en charge
Plateforme cible Windows
En-tête rtscom.h
DLL RTSCom.dll

Voir aussi

Istylusasyncplugin

IStylusPlugin, interface

IStylusSyncPlugin

Classe RealTimeStylus