次の方法で共有


IStylusPlugin::InAirPackets メソッド (rtscom.h)

スタイラスがデジタイザーの上を移動していることをプラグインを実装するオブジェクトに通知します。

構文

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
);

パラメーター

[in] piRtsSrc

通知を送信した RealTimeStylus クラス (RTS) オブジェクト。

[in] pStylusInfo

スタイラスに関連付けられている RTS に関する情報を含む StylusInfo 構造体

[in] cPktCount

データ パケットあたりのプロパティの数。

[in] cPktBuffLength

pPackets が指すバッファーの長さ (バイト単位)。 各パケットによって占有されるメモリは (cPktBuffLength / cPktCount) です。 有効な値は、0 ~ 0x7FFFです(両端を含む)。

[in] pPackets

パケット データの先頭へのポインター。 これは読み取り専用です。

[in, out] pcInOutPkts

ppInOutPkt 内の LONG の数。

[in, out] ppInOutPkts

変更されたスタイラス データ パケットの配列へのポインター。 プラグインでは、このパラメーターを使用して、変更されたパケット データをダウンストリーム パケットにフィードできます。 NULL 以外の値の場合、RTS は pPacket パラメーターを使用してこのデータをプラグインに送信します。

戻り値

戻り値の説明については、「 クラスとインターフェイス - インク分析」を参照してください。

注釈

このメソッドは、データ パケットが範囲内にあるときにスタイラスによって作成されるが、デジタイザーの上を移動し、デジタイザーに触れていない場合に呼び出されます。 ppInOutPkt パラメーターを使用して、変更されたパケットの配列を返すことができます。 バッファーを作成し、 それに ppInOutPkts をポイントします。 その場所に存在できるパケットは 1 つだけです。

メモIStylusPlugin::P ackets メソッドおよび IStylusPlugin::InAirPackets メソッドメソッドで使用されるパケットは削除できます。
 
スタイラス プラグインは、1 つの RTS または多数に関連付けられます。 次の場合 は、piRtsSrc パラメーターを使用します。
  • 通知でプラグインが通知の送信元となった特定のデジタイザーに関する詳細情報を取得する必要がある場合。
  • システムを介して追加のカスタム通知を入力する場合。
パケットは、より効率的なデータ転送のためにバンドルできます。 そのため、パケットごとに 1 回プラグインを呼び出す必要はありません。 IStylusPlugin::InAirPackets メソッドIStylusPlugin::P ackets メソッド は、1 つ以上のパケットを送信できます。

次の C++ コード例では、パケットを四角形に拘束するように X,Y データを変更する IStylusPlugin::P ackets メソッドを 実装します。 同じコードを 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;
}

要件

要件
サポートされている最小のクライアント Windows XP Tablet PC Edition [デスクトップ アプリのみ]
サポートされている最小のサーバー サポートなし
対象プラットフォーム Windows
ヘッダー rtscom.h
[DLL] RTSCom.dll

こちらもご覧ください

IStylusAsyncPlugin

IStylusPlugin インターフェイス

IStylusPlugin::StylusDown メソッド

IStylusPlugin::StylusUp メソッド

IStylusSyncPlugin