Partager via


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

Avertit l’objet qui implémente le plug-in que le stylet se déplace au-dessus du numériseur.

Syntaxe

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

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] 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. Ce compte est en lecture seule.

[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. Pour une valeur autre que NULL, 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 - Analyse d’entrée manuscrite.

Remarques

Cette méthode est appelée lorsque des paquets de données sont créés par le stylet lorsqu’il se trouve dans la plage, mais qu’il se déplace au-dessus du numériseur et ne touche pas le numériseur. Vous pouvez retourner un tableau de paquets modifiés à l’aide du paramètre ppInOutPkt . Créez une mémoire tampon et pointez des ppInOutPkts vers celle-ci. Un seul paquet peut être présent à cet emplacement.

Note Les paquets utilisés par les méthodes IStylusPlugin ::P ackets etIStylusPlugin ::InAirPackets Peuvent être supprimés .
 
Un plug-in de stylet peut être associé à un seul RTS ou à plusieurs. Utilisez le paramètre piRtsSrc dans les cas suivants :
  • Lorsque la notification nécessite que le plug-in acquière plus d’informations sur le numériseur spécifique d’où provient la notification.
  • Lorsque vous entrez des notifications personnalisées supplémentaires via le système.
Les paquets peuvent être regroupés pour un transfert de données plus efficace. Par conséquent, il n’est pas nécessaire d’appeler un plug-in 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. Le même code peut être appliqué à une implémentation de la méthode IStylusPlugin ::InAirPackets.

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