Méthode IStylusPlugin::StylusDown (rtscom.h)
Avertit le plug-in d’implémentation que le stylet de la tablette a touché la surface du numériseur.
Syntaxe
HRESULT StylusDown(
[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 paquets.
[in, out] ppInOutPkt
Pointeur vers le paquet de données du stylet modifié. Le plug-in peut utiliser ce paramètre pour fournir des données de paquets modifiées à des paquets en aval. Une valeur autre que NULL indique que le paquet a été modifié et QUE 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.
Notes
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, méthode et IStylusPlugin::StylusDown, peuvent uniquement être modifiés. Les paquets utilisés par les méthodes IStylusPlugin::P ackets, méthode et IStylusPlugin::InAirPackets, méthode peuvent être supprimés.
Si vous modifiez des paquets, cPropCountPerPkt, qui est le nombre de LONG dans ppInOutPkt, doit être divisible par les propriétés de paquets souhaitées (DPP) actuelles disponibles sur le périphérique d’entrée actuel.
Vous pouvez modifier des paquets en mettant à jour les paramètres cPropCountPerPkt et ppInOutPkts . Remplacez cPropCountPerPkt par un nombre total valide de propriétés de paquets et remplacez ppInOutPkts par un pointeur vers une 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 qui entre pour des événements tels que l’événement NewPackets Event . 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 seule fois par paquet.
Exemples
L’exemple de code C++ suivant implémente une méthode StylusDown 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é que celle implémentée dans l’exemple C#, Exemple de plug-in RealTimeStylus. Le deuxième extrait de code est la fonction ModifyPacket .
STDMETHODIMP CPacketModifier::StylusDown(
/* [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;
}
Spécifications
Client minimal pris en charge | Windows XP Édition Tablette 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