IStylusPlugin::InAirPackets-Methode (rtscom.h)
Benachrichtigt das Objekt, das das Plug-In implementiert, dass sich der Stift über den Digitizer bewegt.
Syntax
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
);
Parameter
[in] piRtsSrc
Das RTS-Objekt ( RealTimeStylus Class ), das die Benachrichtigung gesendet hat.
[in] pStylusInfo
Eine StylusInfo-Strukturstruktur , die die Informationen zum RTS enthält, die dem Eingabestift zugeordnet ist.
[in] cPktCount
Die Anzahl der Eigenschaften pro Datenpaket.
[in] cPktBuffLength
Die Länge des Puffers in Bytes, auf den pPackets verweist. Der von jedem Paket belegte Arbeitsspeicher ist (cPktBuffLength / cPktCount). Gültige Werte sind einschließlich 0 bis 0x7FFF.
[in] pPackets
Ein Zeiger auf den Anfang der Paketdaten. Dieses ist schreibgeschützt.
[in, out] pcInOutPkts
Die Anzahl der LONGs in ppInOutPkt.
[in, out] ppInOutPkts
Ein Zeiger auf ein Array geänderter Eingabestiftdatenpakete. Das Plug-In kann diesen Parameter verwenden, um geänderte Paketdaten an nachgeschaltete Pakete einzuspeisen. Für einen anderen Wert als NULL sendet RTS diese Daten mithilfe des pPacket-Parameters an Plug-Ins.
Rückgabewert
Eine Beschreibung der Rückgabewerte finden Sie unter Klassen und Schnittstellen – Freihandanalyse.
Hinweise
Diese Methode wird aufgerufen, wenn Datenpakete vom Stift erstellt werden, wenn er sich im Bereich befindet, sich aber über dem Digitizer bewegt und den Digitizer nicht berührt. Sie können ein Array geänderter Pakete mit dem ppInOutPkt-Parameter zurückgeben. Erstellen Sie einen Puffer, und zeigen Sie ppInOutPkts darauf. An diesem Speicherort kann nur ein Paket vorhanden sein.
- Wenn die Benachrichtigung erfordert, dass das Plug-In weitere Informationen zu dem bestimmten Digitizer erhält, von dem die Benachrichtigung stammt.
- Wenn Sie zusätzliche benutzerdefinierte Benachrichtigungen über das System eingeben.
Beispiele
Im folgenden C++-Codebeispiel wird eine IStylusPlugin::P ackets-Methode implementiert, die die X,Y-Daten ändert, um die Pakete in ein Rechteck zu schränken. Der gleiche Code könnte auf eine Implementierung der IStylusPlugin::InAirPackets-Methode angewendet werden.
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;
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows XP Tablet PC Edition [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Nicht unterstützt |
Zielplattform | Windows |
Kopfzeile | rtscom.h |
DLL | RTSCom.dll |
Weitere Informationen
IStylusPlugin::StylusDown-Methode