다음을 통해 공유


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

알림을 보낸 RTS( RealTimeStylus Class ) 개체입니다.

[in] pStylusInfo

스타일러스와 연결된 RTS에 대한 정보를 포함하는 StylusInfo 구조체 입니다.

[in] cPktCount

데이터 패킷당 속성 수입니다.

[in] cPktBuffLength

pPacket이 가리키는 버퍼의 길이(바이트)입니다. 각 패킷이 차지하는 메모리는 입니다(cPktBuffLength / cPktCount). 유효한 값은 0부터 0x7FFF( 포함)입니다.

[in] pPackets

패킷 데이터의 시작 부분에 대한 포인터입니다. 읽기 전용입니다.

[in, out] pcInOutPkts

ppInOutPktLONG 수입니다.

[in, out] ppInOutPkts

수정된 스타일러스 데이터 패킷 배열에 대한 포인터입니다. 플러그 인은 이 매개 변수를 사용하여 수정된 패킷 데이터를 다운스트림 패킷에 공급할 수 있습니다. NULL 이외의 값의 경우 RTS는 pPacket 매개 변수를 사용하여 이 데이터를 플러그 인으로 보냅니다.

반환 값

반환 값에 대한 설명은 클래스 및 인터페이스 - 잉크 분석을 참조하세요.

설명

이 메서드는 데이터 패킷이 범위 내에 있지만 디지타이저 위로 이동하고 디지타이저를 건드리지 않을 때 스타일러스에 의해 만들어질 때 호출됩니다. ppInOutPkt 매개 변수를 사용하여 수정된 패킷 배열을 반환할 수 있습니다. 버퍼를 만들고 ppInOutPkts를 가리킵니다. 해당 위치에는 하나의 패킷만 있을 수 있습니다.

참고IStylusPlugin::P ackets 메서드IStylusPlugin::InAirPackets 메서드 에서 사용하는 패킷을 삭제할 수 있습니다.
 
스타일러스 플러그 인은 단일 RTS 또는 많은 와 연결될 수 있습니다. 다음 경우에 piRtsSrc 매개 변수를 사용합니다.
  • 알림에 플러그 인이 알림이 시작된 특정 디지타이저에 대한 자세한 정보를 획득해야 하는 경우
  • 시스템을 통해 추가 사용자 지정 알림을 입력하는 경우
패킷을 번들로 묶어 보다 효율적인 데이터 전송을 수행할 수 있습니다. 따라서 플러그 인은 패킷당 한 번 호출할 필요가 없습니다. IStylusPlugin::InAirPackets 메서드IStylusPlugin::P ackets 메서드 는 하나 이상의 패킷을 보낼 수 있습니다.

예제

다음 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 태블릿 PC 버전 [데스크톱 앱만 해당]
지원되는 최소 서버 지원되는 버전 없음
대상 플랫폼 Windows
헤더 rtscom.h
DLL RTSCom.dll

추가 정보

IStylusAsyncPlugin

IStylusPlugin 인터페이스

IStylusPlugin::StylusDown 메서드

IStylusPlugin::StylusUp 메서드

IStylusSyncPlugin