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
IStylusPlugin, interface
IStylusPlugin ::StylusDown, méthode