Antarmuka IStrokeBuilder (rtscom.h)
Gunakan antarmuka untuk membuat goresan secara terprogram dari data paket.
Warisan
Antarmuka IStrokeBuilder mewarisi dari antarmuka IUnknown . IStrokeBuilder juga memiliki jenis anggota ini:
Metode
Antarmuka IStrokeBuilder memiliki metode ini.
IStrokeBuilder::AppendPackets Menambahkan paket ke akhir daftar paket input digitizer. |
IStrokeBuilder::BeginStroke Memulai goresan pada objek tinta dengan menggunakan data paket dari objek Kelas RealTimeStylus. |
IStrokeBuilder::CreateStroke Membuat goresan pada objek tinta dengan menggunakan data paket yang berasal dari objek Kelas RealTimeStylus. |
IStrokeBuilder::EndStroke Mengakhiri stroke dan mengembalikan objek stroke. |
IStrokeBuilder::get_Ink Mendapatkan atau mengatur objek tinta yang terkait dengan objek IStrokeBuilder. |
Keterangan
Antarmuka ini diimplementasikan oleh Kelas StrokeBuilder.
Kelas StrokeBuilder menyediakan metode alternatif untuk membuat stroke untuk aplikasi yang mengelola data. Ini memiliki metode yang dapat dipanggil dari pemberitahuan StylusDown, Paket, dan StylusUp .
Dua model berikut didukung.
- Mengonversi informasi stroke kustom menjadi stroke dengan cara atomik dengan menggunakan metode IStrokeBuilder::CreateStroke Method .
- Membangun stroke dengan menggunakan metode IStrokeBuilder::BeginStroke Method, IStrokeBuilder::AppendPackets Method, dan IStrokeBuilder::EndStroke Method , yang mencerminkan pemberitahuan StylusDown, Packets, dan StylusUp .
Contoh
Contoh C++ berikut menunjukkan implementasi parsial dari kelas Antarmuka IStylusPlugin . Plug-in menggunakan objek StrokeBuilder untuk membuat goresan tinta baru.
// 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
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP Tablet PC Edition [hanya aplikasi desktop] |
Server minimum yang didukung | Tidak ada yang didukung |
Target Platform | Windows |
Header | rtscom.h |