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