Поделиться через


Метод 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

Структура StylusInfo Structure , содержащая сведения о RTS, связанные с пером.

[in] cPktCount

Количество свойств на пакет данных.

[in] cPktBuffLength

Длина (в байтах) буфера, на который указывает pPackets. Память, занимаемая каждым пакетом, — (cPktBuffLength / cPktCount). Допустимые значения: от 0 до 0x7FFF включительно.

[in] pPackets

Указатель на начало данных пакета. Она доступна только в режиме для чтения.

[in, out] pcInOutPkts

Количество LONG в ppInOutPkt.

[in, out] ppInOutPkts

Указатель на массив измененных пакетов данных пера. Подключаемый модуль может использовать этот параметр для передачи измененных данных пакетов в подчиненные пакеты. Для значения, отличного от NULL, RTS будет отправлять эти данные в подключаемые модули с помощью параметра pPacket .

Возвращаемое значение

Описание возвращаемых значений см. в разделе Классы и интерфейсы — анализ рукописного ввода.

Комментарии

Этот метод вызывается, когда перо создает пакеты данных, когда он находится в диапазоне, но перемещается выше дигитайзера и не касается дигитайзера. Массив измененных пакетов можно вернуть с помощью параметра ppInOutPkt . Создайте буфер и наведите в него запрос ppInOutPkts . В этом расположении может присутствовать только один пакет.

Примечание Пакеты, используемые методами IStylusPlugin::P ackets и методом IStylusPlugin::InAirPackets , можно удалить.
 
Подключаемый модуль пера может быть связан с одним RTS или с несколькими. Используйте параметр piRtsSrc в следующих случаях:
  • Когда для уведомления требуется, чтобы подключаемый модуль получил дополнительные сведения о конкретном дигитайзере, от которого было получено уведомление.
  • При вводе дополнительных пользовательских уведомлений через систему.
Пакеты можно объединить для более эффективной передачи данных. Поэтому подключаемый модуль не требуется вызывать один раз для каждого пакета. Метод IStylusPlugin::InAirPackets и метод IStylusPlugin::P ackets может отправлять один или несколько пакетов.

Примеры

В следующем примере кода C++ реализуется метод метода IStylusPlugin::P ackets, который изменяет данные X,Y, чтобы ограничить пакеты прямоугольником. Тот же код можно применить к реализации метода 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
Header rtscom.h
DLL RTSCom.dll

См. также раздел

IStylusAsyncPlugin

Интерфейс IStylusPlugin

Метод IStylusPlugin::StylusDown

Метод IStylusPlugin::StylusUp

IStylusSyncPlugin