Freigeben über


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.

Hinweis Pakete, die von den Methoden IStylusPlugin::P ackets Method und IStylusPlugin::InAirPackets Method verwendet werden, können gelöscht werden.
 
Ein Eingabestift-Plug-In kann einem einzelnen RTS oder vielen zugeordnet sein. Verwenden Sie den piRtsSrc-Parameter in den folgenden Fällen:
  • 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.
Pakete können für eine effizientere Datenübertragung gebündelt werden. Daher muss ein Plug-In nicht einmal pro Paket aufgerufen werden. 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. 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

Istylusasyncplugin

IStylusPlugin-Schnittstelle

IStylusPlugin::StylusDown-Methode

IStylusPlugin::StylusUp-Methode

Istylussyncplugin