Condividi tramite


Interfaccia IStrokeBuilder (rtscom.h)

Usare l'interfaccia per creare tratti a livello di codice dai dati dei pacchetti.

Ereditarietà

L'interfaccia IStrokeBuilder eredita dall'interfaccia IUnknown . IStrokeBuilder include anche questi tipi di membri:

Metodi

L'interfaccia IStrokeBuilder include questi metodi.

 
IStrokeBuilder::AppendPackets

Aggiunge un pacchetto alla fine dell'elenco di pacchetti di input del digitalizzatore.
IStrokeBuilder::BeginStroke

Inizia un tratto su un oggetto input penna usando i dati dei pacchetti da un oggetto RealTimeStylus Class.
IStrokeBuilder::CreateStroke

Crea tratti in un oggetto input penna usando i dati dei pacchetti provenienti da un oggetto Classe RealTimeStylus.
IStrokeBuilder::EndStroke

Termina un tratto e restituisce l'oggetto stroke.
IStrokeBuilder::get_Ink

Ottiene o imposta l'oggetto input penna associato all'oggetto IStrokeBuilder.

Commenti

Questa interfaccia viene implementata dalla classe StrokeBuilder.

La classe StrokeBuilder fornisce un metodo alternativo per la creazione di un tratto per le applicazioni che gestiscono i dati. Include metodi che possono essere chiamati dalle notifiche StylusDown, Pacchetti e StylusUp .

Sono supportati i due modelli seguenti.

Esempio

Nell'esempio C++ seguente viene illustrata un'implementazione parziale di una classe IStylusPlugin Interface . Il plug-in usa un oggetto StrokeBuilder per creare un nuovo tratto penna.

// CStrokeBuilderPlugin

// Helper functions
HRESULT CStrokeBuilderPlugin::GetInk(IInkDisp** pInk)
{
	return m_pStrokeBuilder->get_Ink(pInk);
}

// IStylusAsyncPlugin Interface implementation

STDMETHODIMP CStrokeBuilderPlugin::RealTimeStylusEnabled( 
            /* [in] */ IRealTimeStylus *piRtsSrc,
            /* [in] */ ULONG cTcidCount,
            /* [size_is][in] */ const TABLET_CONTEXT_ID *pTcids)
{
	// Create an IStrokeBuilder object
	return CoCreateInstance(CLSID_StrokeBuilder, NULL, CLSCTX_INPROC, IID_IStrokeBuilder, (VOID **)&m_pStrokeBuilder);
}

STDMETHODIMP CStrokeBuilderPlugin::DataInterest( 
            /* [retval][out] */ RealTimeStylusDataInterest *pDataInterest)
{
	// Set up the messages we want to receive
	*pDataInterest = (RealTimeStylusDataInterest)(RTSDI_StylusDown | RTSDI_Packets |
                                                  RTSDI_StylusUp | RTSDI_Error);
	return S_OK;
}

STDMETHODIMP CStrokeBuilderPlugin::StylusDown( 
            /* [in] */ IRealTimeStylus *piRtsSrc,
            /* [in] */ const StylusInfo *pStylusInfo,
            /* [in] */ ULONG cPropCountPerPkt,
            /* [size_is][in] */ LONG *pPacket,
            /* [out][in] */ LONG **ppInOutPkt)
{
	FLOAT fInkToDeviceScaleX;
	FLOAT fInkToDeviceScaleY;
	ULONG cPacketProperties;
	PACKET_PROPERTY* pPacketProperties;

	// Get the info we need to call BeginStroke
	HRESULT hr = piRtsSrc->GetPacketDescriptionData(pStylusInfo->tcid, &fInkToDeviceScaleX, &fInkToDeviceScaleY, 
													&cPacketProperties, &pPacketProperties);

	if (SUCCEEDED(hr))
	{
		// Start creating the stroke
		hr = m_pStrokeBuilder->BeginStroke(pStylusInfo->tcid, pStylusInfo->cid, pPacket, cPropCountPerPkt, 
											pPacketProperties, fInkToDeviceScaleX, fInkToDeviceScaleY, &m_piStroke);
	}
	
	return hr;
}

STDMETHODIMP CStrokeBuilderPlugin::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)
{
	// Add packet to the stroke
	return m_pStrokeBuilder->AppendPackets(pStylusInfo->tcid, pStylusInfo->cid, cPktBuffLength, pPackets);
}

STDMETHODIMP CStrokeBuilderPlugin::StylusUp( 
            /* [in] */ IRealTimeStylus *piRtsSrc,
            /* [in] */ const StylusInfo *pStylusInfo,
            /* [in] */ ULONG cPropCountPerPkt,
            /* [size_is][in] */ LONG *pPacket,
            /* [out][in] */ LONG **ppInOutPkt)
{
    // Finish the stroke. This adds the stroke to the StrokeBuilder's Ink object.
    return m_pStrokeBuilder->EndStroke(pStylusInfo->tcid, pStylusInfo->cid, &m_piStroke, NULL);
}

STDMETHODIMP CStrokeBuilderPlugin::Error( 
            /* [in] */ IRealTimeStylus *piRtsSrc,
            /* [in] */ IStylusPlugin *piPlugin,
            /* [in] */ RealTimeStylusDataInterest dataInterest,
            /* [in] */ HRESULT hrErrorCode,
            /* [out][in] */ LONG_PTR *lptrKey)
{
	CString strError;
	strError.Format(L"An error occurred. Error code: %d", hrErrorCode);
	TRACE(strError);
	return S_OK;
}

// The remaining interface methods are not used

Requisiti

Requisito Valore
Client minimo supportato Windows XP Tablet PC Edition [solo app desktop]
Server minimo supportato Nessuno supportato
Piattaforma di destinazione Windows
Intestazione rtscom.h

Vedi anche

Classe DynamicRenderer

Interfaccia IStrokeBuilder

Classe RealTimeStylus

Classi e interfacce RealTimeStylus