Compartilhar via


Método IStylusPlugin::InAirPackets (rtscom.h)

Notifica o objeto que implementa o plug-in de que a caneta está se movendo acima do digitalizador.

Sintaxe

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

Parâmetros

[in] piRtsSrc

O objeto RTS ( Classe RealTimeStylus ) que enviou a notificação.

[in] pStylusInfo

Uma estrutura stylusInfo que contém as informações sobre o RTS associado à caneta.

[in] cPktCount

O número de propriedades por pacote de dados.

[in] cPktBuffLength

O comprimento, em bytes, do buffer apontado por pPackets. A memória ocupada por cada pacote é (cPktBuffLength / cPktCount). Os valores válidos são de 0 a 0x7FFF, inclusive.

[in] pPackets

Um ponteiro para o início dos dados do pacote. Ela é somente leitura.

[in, out] pcInOutPkts

O número de LONGs em ppInOutPkt.

[in, out] ppInOutPkts

Um ponteiro para uma matriz de pacotes de dados de caneta modificados. O plug-in pode usar esse parâmetro para alimentar dados de pacotes modificados para pacotes downstream. Para um valor diferente de NULL, o RTS enviará esses dados para plug-ins usando o parâmetro pPacket .

Retornar valor

Para obter uma descrição dos valores retornados, consulte Classes e Interfaces – Análise de Tinta.

Comentários

Esse método é chamado quando os pacotes de dados são criados pela caneta quando ele está no intervalo, mas está se movendo acima do digitalizador e não tocando no digitalizador. Você pode retornar uma matriz de pacotes modificados usando o parâmetro ppInOutPkt . Crie um buffer e aponte ppInOutPkts para ele. Somente um pacote pode estar presente nesse local.

Nota Pacotes usados pelos métodos IStylusPlugin::P ackets e métodos IStylusPlugin::InAirPackets podem ser excluídos.
 
Um plug-in de caneta pode estar associado a um único RTS ou a muitos. Use o parâmetro piRtsSrc nos seguintes casos:
  • Quando a notificação exige que o plug-in adquira mais informações sobre o digitalizador específico do qual a notificação se originou.
  • Quando você insira notificações personalizadas adicionais por meio do sistema.
Os pacotes podem ser agrupados para transferência de dados mais eficiente. Portanto, um plug-in não é necessário para ser chamado uma vez por pacote. O Método IStylusPlugin::InAirPackets e o Método IStylusPlugin::P ackets podem enviar um ou mais pacotes.

Exemplos

O exemplo de código C++ a seguir implementa um método do Método IStylusPlugin::P ackets que modifica os dados X,Y para conter os pacotes a um retângulo. O mesmo código pode ser aplicado a uma implementação do método 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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP Tablet PC Edition [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Nenhum compatível
Plataforma de Destino Windows
Cabeçalho rtscom.h
DLL RTSCom.dll

Confira também

Istylusasyncplugin

IStylusPlugin Interface

Método IStylusPlugin::StylusDown

Método IStylusPlugin::StylusUp

Istylussyncplugin