IStylusPlugin::P ackets-Methode (rtscom.h)
Benachrichtigt das Objekt, das das Plug-In implementiert, dass sich der Tablet-Stift auf dem Digitizer bewegt.
Syntax
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
);
Parameter
[in] piRtsSrc
Das RealTimeStylus-Klassenobjekt , das die Benachrichtigung gesendet hat.
[in] pStylusInfo
Eine StylusInfo-Strukturstruktur , die Informationen zum RTS enthält, das dem Stift 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.
[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. Ein anderer Wert als NULL gibt an, dass der RTS diese Daten mithilfe des pPacket-Parameters an Plug-Ins sendet.
Rückgabewert
Eine Beschreibung der Rückgabewerte finden Sie unter RealTimeStylus-Klassen und -Schnittstellen.
Hinweise
Tritt auf, wenn sich der Stift bewegt und die Digitizeroberfläche berührt. Verwenden Sie diese Benachrichtigung, um die Paketdaten innerhalb eines angegebenen Rechtecks einzuschränken. Pakete, die von den Methoden IStylusPlugin::P ackets Method und IStylusPlugin::InAirPackets Method verwendet werden, können gelöscht werden.
Sie können ein Array geänderter Pakete mit dem ppInOutPkt-Parameter zurückgeben.
Pakete können gebündelt werden, um die Datenübertragung effizienter zu gestalten, sodass ein Plug-In nicht einmal pro Paket aufgerufen werden muss. Die IStylusPlugin::InAirPackets-Methode und die IStylusPlugin::P ackets-Methode können ein oder mehrere Pakete senden.
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. Dies ist die gleiche Funktionalität, die in C# im Beispiel des RealTimeStylus-Plug-Ins implementiert wird.
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-Schnittstelle
IStylusPlugin::StylusDown-Methode