Partager via


Méthode IStylusPlugin ::P ackets (rtscom.h)

Avertit l’objet qui implémente le plug-in que le stylet de tablette se déplace sur le numériseur.

Syntaxe

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

Paramètres

[in] piRtsSrc

Objet de classe RealTimeStylus qui a envoyé la notification.

[in] pStylusInfo

Structure StylusInfo qui contient des informations sur le RTS associé au stylet.

[in] cPktCount

Nombre de propriétés par paquet de données.

[in] cPktBuffLength

Longueur, en octets, de la mémoire tampon pointée vers pPackets. La mémoire occupée par chaque paquet est (cPktBuffLength / cPktCount). Les valeurs valides sont comprises entre 0 et 0x7FFF, inclusivement.

[in] pPackets

Pointeur vers le début des données de paquet.

[in, out] pcInOutPkts

Nombre de LONG dans ppInOutPkt.

[in, out] ppInOutPkts

Pointeur vers un tableau de paquets de données de stylet modifiés. 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 RTS enverra 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

Se produit lorsque le stylet se déplace et touche la surface du numériseur. Utilisez cette notification pour limiter les données de paquet dans un rectangle spécifié. Les paquets utilisés par les méthodes IStylusPlugin ::P ackets etIStylusPlugin ::InAirPackets Peuvent être supprimés .

Vous pouvez retourner un tableau de paquets modifiés à l’aide du paramètre ppInOutPkt .

Les paquets peuvent être regroupés afin de rendre le transfert de données plus efficace, de sorte qu’un plug-in n’est pas nécessaire d’être appelé une seule fois par paquet. La méthode IStylusPlugin ::InAirPackets et la méthode IStylusPlugin ::P ackets peuvent envoyer un ou plusieurs paquets.

Exemples

L’exemple de code C++ suivant implémente une méthode IStylusPlugin ::P ackets Method qui modifie les données X,Y pour restreindre les paquets dans un rectangle. Il s’agit de la même fonctionnalité implémentée en C# dans l’exemple de plug-in 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;
}

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

IStylusPlugin ::StylusDown, méthode

IStylusPlugin ::StylusUp, méthode

IStylusSyncPlugin

Classe RealTimeStylus