IStrokeBuilder 介面 (rtscom.h)
使用 介面,以程序設計方式從封包數據建立筆劃。
繼承
IStrokeBuilder 介面繼承自 IUnknown 介面。 IStrokeBuilder 也有下列類型的成員:
方法
IStrokeBuilder 介面具有這些方法。
IStrokeBuilder::AppendPackets 將封包新增至數位板輸入封包清單的結尾。 |
IStrokeBuilder::BeginStroke 使用 RealTimeStylus 類別物件的封包數據,開始筆墨物件的筆劃。 |
IStrokeBuilder::CreateStroke 使用來自 RealTimeStylus Class 物件的封包數據,在筆跡物件上建立筆劃。 |
IStrokeBuilder::EndStroke 結束筆劃並傳回筆劃物件。 |
IStrokeBuilder::get_Ink 取得或設定與 IStrokeBuilder 對象相關聯的筆跡物件。 |
備註
此介面是由 StrokeBuilder 類別實作。
StrokeBuilder 類別提供為管理數據的應用程式建立筆劃的替代方法。 它有可從 StylusDown、 Packets 和 StylusUp 通知呼叫的方法。
支援下列兩個模型。
- 使用 IStrokeBuilder::CreateStroke 方法 方法,以不可部分完成的方式將自定義筆劃資訊轉換為筆劃。
- 使用 IStrokeBuilder::BeginStroke 方法、 IStrokeBuilder::AppendPackets 方法,以及 IStrokeBuilder::EndStroke 方法 方法,以鏡像 StylusDown、 Packets 和 StylusUp 通知來建置筆劃。
範例
下列 C++ 範例顯示 IStylusPlugin 介面 類別的部分實作。 外掛程式會使用 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 Tablet PC Edition [僅限傳統型應用程式] |
最低支援的伺服器 | 都不支援 |
目標平台 | Windows |
標頭 | rtscom.h |