IStrokeBuilder インターフェイス (rtscom.h)
インターフェイスを使用して、プログラムによってパケット データからストロークを作成します。
継承
IStrokeBuilder インターフェイスは、IUnknown インターフェイスから継承されます。 IStrokeBuilder には、次の種類のメンバーもあります。
メソッド
IStrokeBuilder インターフェイスには、これらのメソッドがあります。
IStrokeBuilder::AppendPackets デジタイザー入力パケット リストの末尾にパケットを追加します。 |
IStrokeBuilder::BeginStroke RealTimeStylus クラス オブジェクトのパケット データを使用して、インク オブジェクトのストロークを開始します。 |
IStrokeBuilder::CreateStroke RealTimeStylus クラス オブジェクトから取得したパケット データを使用して、インク オブジェクトにストロークを作成します。 |
IStrokeBuilder::EndStroke ストロークを終了し、ストローク オブジェクトを返します。 |
IStrokeBuilder::get_Ink IStrokeBuilder オブジェクトに関連付けられているインク オブジェクトを取得または設定します。 |
注釈
このインターフェイスは StrokeBuilder クラスによって実装されます。
StrokeBuilder クラスには、データを管理するアプリケーションのストロークを作成する別の方法が用意されています。 StylusDown、Packets、StylusUp 通知から呼び出すことができるメソッドがあります。
次の 2 つのモデルがサポートされています。
- IStrokeBuilder::CreateStroke メソッドを使用して、カスタム ストローク情報をアトミックな方法でストロークに変換します。
- IStrokeBuilder::BeginStroke メソッド、IStrokeBuilder::AppendPackets メソッド、および StylusDown、Packets、StylusUp 通知をミラーする IStrokeBuilder::EndStroke メソッドの各メソッドを使用して、ストロークをビルドします。
例
次の C++ の例は、 IStylusPlugin Interface クラスの部分的な実装を示しています。 プラグインは StrokeBuilder オブジェクトを使用して新しいインク ストロークを作成します。
// 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
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP タブレット PC エディション [デスクトップ アプリのみ] |
サポートされている最小のサーバー | サポートなし |
対象プラットフォーム | Windows |
ヘッダー | rtscom.h |