Bagikan melalui


Metode IStylusPlugin::StylusUp (rtscom.h)

Memberi tahu plug-in penerapan bahwa pengguna telah menaikkan pena tablet dari permukaan digitizer tablet.

Sintaks

HRESULT StylusUp(
  [in]      IRealTimeStylus  *piRtsSrc,
  [in]      const StylusInfo *pStylusInfo,
  [in]      ULONG            cPropCountPerPkt,
  [in]      LONG             *pPacket,
  [in, out] LONG             **ppInOutPkt
);

Parameter

[in] piRtsSrc

Objek Kelas RealTimeStylus (RTS) yang mengirim pemberitahuan.

[in] pStylusInfo

Struktur StylusInfo yang berisi informasi tentang RTS yang terkait dengan pena.

[in] cPropCountPerPkt

Jumlah properti per paket. Nilai yang valid adalah 0 hingga 32, inklusif.

[in] pPacket

Awal data paket.

[in, out] ppInOutPkt

Penunjuk ke paket data stylus yang dimodifikasi. Plug-in dapat menggunakan parameter ini untuk memberi umpan data paket yang dimodifikasi ke paket hilir. Nilai selain NULL menunjukkan bahwa paket telah dimodifikasi dan RTS akan mengirim data ini ke plug-in dengan menggunakan parameter pPacket .

Nilai kembali

Untuk deskripsi nilai pengembalian, lihat Kelas dan Antarmuka RealTimeStylus.

Keterangan

Metode ini digunakan ketika pena meninggalkan permukaan digitizer.

Anda dapat mengembalikan array paket yang dimodifikasi di buffer, ppInOutPkt. Paket yang digunakan oleh metode IStylusPlugin::StylusUp Method dan IStylusPlugin::StylusDown Method hanya dapat dimodifikasi. Mereka tidak dapat dihapus. Paket yang digunakan oleh metode Metode IStylusPlugin::P ackets dan Metode IStylusPlugin::InAirPackets dapat dihapus.

Jika Anda memodifikasi paket, maka cPropCountPerPkt, yang merupakan jumlah LONG di ppInOutPkt, harus dapat dibagi oleh properti paket (DPP) yang diinginkan saat ini yang tersedia pada perangkat input saat ini.

Anda memodifikasi paket dengan memperbarui parameter cPropCountPerPkt dan ppInOutPkts . Ubah cPropCountPerPkt menjadi jumlah properti paket total yang valid dan ppInOutPkts menjadi buffer data yang valid yang memperhitungkan nilai untuk setiap DPP di setiap paket. Hanya satu paket yang dapat hadir di lokasi tersebut untuk IStylusPlugin::StylusUp Method dan IStylusPlugin::StylusDown Method.

Misalnya, jika Anda menambahkan tiga paket dan DPP Anda saat ini adalah X,Y dan Tekanan, maka Anda harus memiliki sembilan nilai LONG dalam buffer ini dan mengatur cPropCountPerPkt ke 9.

Nilai cPropCountPerPkt berguna untuk membantu mengklarifikasi batas antara paket dalam array bilangan bulat datar yang masuk untuk peristiwa seperti peristiwa NewPackets Event . Paket dapat dibundel agar lebih efisien dengan transfer data, sehingga tidak diperlukan plug-is yang disebut sekali per paket.

Contoh

Contoh kode C++ berikut mengimplementasikan metode StylusUp yang memanggil fungsi pembantu, ModifyPacket, untuk mengubah nilai data X,Y agar berada dalam persegi panjang tertentu. Ini adalah fungsionalitas yang sama yang diimplementasikan dalam sampel C#, Sampel Plug-in RealTimeStylus. Cuplikan kode kedua adalah fungsi ModifyPacket .

STDMETHODIMP CPacketModifier::StylusUp( 
            /* [in] */ IRealTimeStylus *piRtsSrc,
            /* [in] */ const StylusInfo *pStylusInfo,
            /* [in] */ ULONG cPropCountPerPkt,
            /* [size_is][in] */ LONG *pPacket,
            /* [out][in] */ LONG **ppInOutPkt)
{
	return ModifyPacket(cPropCountPerPkt, pPacket, ppInOutPkt);
}

// Helper method to modify a single packet
// Called from StylusDown() and StylusUp()
HRESULT CPacketModifier::ModifyPacket(
            /* [in] */ ULONG cPropCountPerPkt,
            /* [size_is][in] */ LONG *pPacket,
            /* [out][in] */ LONG **ppInOutPkt)
{
	// Pointer to a buffer to hold changed packet values
	LONG* pTempOutPkt = NULL;
	
	// X and Y come first (0 and 1), 
	// other properties follow
	ULONG iOtherProps = 2;

	if (cPropCountPerPkt > 0)
	{
		pTempOutPkt = (LONG*)CoTaskMemAlloc(sizeof(LONG)*cPropCountPerPkt);

		if (NULL != pTempOutPkt)
		{
			// Packet data always has x followed by y followed by the rest.
			LONG x = pPacket[0];
			LONG y = pPacket[1];

			// 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.
			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 != pPacket[0]) || (y != pPacket[1]))
			{
				pTempOutPkt[0] = x;
				pTempOutPkt[1] = y;

				// Copy the properties that we haven't modified
				while (iOtherProps < cPropCountPerPkt)
				{
					pTempOutPkt[iOtherProps] = pPacket[iOtherProps++];
				}

				*ppInOutPkt = pTempOutPkt;
			}
			else
			{
				CoTaskMemFree(pTempOutPkt);
			}
		}
	}

	return S_OK;
}

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
DLL RTSCom.dll

Lihat juga

IStylusAsyncPlugin

Antarmuka IStylusPlugin

IStylusSyncPlugin

Kelas RealTimeStylus