IStylusPlugin::P ackets 메서드(rtscom.h)
플러그 인을 구현하는 개체에 태블릿 펜이 디지타이저에서 이동하고 있음을 알 수 있습니다.
구문
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
);
매개 변수
[in] piRtsSrc
알림을 보낸 RealTimeStylus 클래스 개체입니다.
[in] pStylusInfo
펜과 연결된 RTS에 대한 정보를 포함하는 StylusInfo 구조체 입니다.
[in] cPktCount
데이터 패킷당 속성 수입니다.
[in] cPktBuffLength
pPacket이 가리키는 버퍼의 길이(바이트)입니다. 각 패킷이 차지하는 메모리는 입니다(cPktBuffLength / cPktCount). 유효한 값은 0부터 0x7FFF( 포함)입니다.
[in] pPackets
패킷 데이터의 시작 부분에 대한 포인터입니다.
[in, out] pcInOutPkts
ppInOutPkt의 LONG 수입니다.
[in, out] ppInOutPkts
수정된 스타일러스 데이터 패킷 배열에 대한 포인터입니다. 플러그 인은 이 매개 변수를 사용하여 수정된 패킷 데이터를 다운스트림 패킷에 공급할 수 있습니다. NULL 이외의 값은 RTS가 pPacket 매개 변수를 사용하여 이 데이터를 플러그 인에 전송한다는 것을 나타냅니다.
반환 값
반환 값에 대한 설명은 RealTimeStylus 클래스 및 인터페이스를 참조하세요.
설명
펜이 이동하고 디지타이저 표면에 닿을 때 발생합니다. 이 알림을 사용하여 지정된 사각형 내에서 패킷 데이터를 제한합니다. IStylusPlugin::P ackets 메서드 및 IStylusPlugin::InAirPackets 메서드 메서드에서 사용하는 패킷을 삭제할 수 있습니다.
ppInOutPkt 매개 변수를 사용하여 수정된 패킷 배열을 반환할 수 있습니다.
패킷당 플러그 인을 한 번 호출할 필요가 없도록 데이터 전송의 효율성을 높일 수 있도록 패킷을 번들로 묶을 수 있습니다. IStylusPlugin::InAirPackets 메서드 및 IStylusPlugin::P ackets 메서드 는 하나 이상의 패킷을 보낼 수 있습니다.
예제
다음 C++ 코드 예제에서는 패킷을 사각형으로 제한하기 위해 X,Y 데이터를 수정하는 IStylusPlugin::P ackets 메서드 메서드를 구현합니다. RealTimeStylus 플러그 인 샘플의 C#에서 구현되는 것과 동일한 기능입니다.
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 |
추가 정보
IStylusPlugin 인터페이스