Convertir un objeto de entrada de l谩piz de texto en entrada de l谩piz 您所在的位置:网站首页 vtdata Convertir un objeto de entrada de l谩piz de texto en entrada de l谩piz

Convertir un objeto de entrada de l谩piz de texto en entrada de l谩piz

#Convertir un objeto de entrada de l谩piz de texto en entrada de l谩piz| 来源: 网络整理| 查看: 265

Convertir un objeto de entrada de l谩piz de texto en entrada de l谩piz Art铆culo 09/23/2022 Tiempo de lectura: 3 minutos

Implementaci贸n de la conversi贸n de un objeto de entrada de l谩piz de texto (tInk) a entrada de l谩piz.

Para convertir de un objeto de entrada de l谩piz de texto a entrada de l谩piz Use la interfaz IPersistStream para escribir el contenido del objeto de entrada de l谩piz de texto en una secuencia. El objeto de entrada de l谩piz de texto usa el formato serializado de entrada de l谩piz para escribir en el vapor. Lea el contenido de la secuencia en una matriz BYTE. Utilice el m茅todo Load del objeto InkDisp para cargar el contenido de la secuencia en el objeto InkDisp. Ejemplo de objeto Text Ink to Ink

El siguiente fragmento de c贸digo convierte un objeto de entrada de l谩piz de texto en entrada de l谩piz.

En primer lugar, el c贸digo obtiene un objeto de entrada de l谩piz de texto.

/* Create a variable to hold the text ink object */ CComPtr spITextInk; /* Obtain the text ink object */

A continuaci贸n, el c贸digo crea un puntero para la secuencia que contiene el contenido del objeto de entrada de l谩piz de texto.

// Create a Stream pointer to hold the saved object CComPtr spStream = NULL;

A continuaci贸n, el c贸digo obtiene la interfaz IPersistStream del objeto de entrada de l谩piz de texto.

// Declare the IPersistStream to be used for retrieving the saved data from the text ink CComPtr spIPersistStream = NULL; // Get the actual IPersistStream interface off of the TextInk HRESULT hr = pITextInk->QueryInterface(IID_IPersistStream, (void **)&spIPersistStream); ASSERT(SUCCEEDED(hr) && spIPersistStream);

A continuaci贸n, el c贸digo usa la interfaz IPersistStream para guardar el contenido del objeto de entrada de l谩piz de texto en la secuencia.

if( SUCCEEDED(hr) && pIPersistStream ) { // Create the stream if( SUCCEEDED(hr=CreateStreamOnHGlobal(NULL, TRUE, &spStream)) && spStream ) { // Save the TextInk through IPersistStream Interface to the IStream hr = spIPersistStream->Save(spStream, FALSE); } }

A continuaci贸n, el c贸digo crea un objeto InkCollector , crea un objeto InkDisp para InkCollector, adjunta inkCollector a la ventana de la aplicaci贸n y habilita la colecci贸n de entrada de l谩piz en InkCollector.

// Now create an InkCollector object along with InkDisp Object if( SUCCEEDED(hr) && spStream) { CComPtr spIInkCollector; CComPtr spIInkDisp = NULL; // Create the InkCollector object. hr = CoCreateInstance(CLSID_InkCollector, NULL, CLSCTX_INPROC_SERVER, IID_IInkCollector, (void **) &spIInkCollector); if (FAILED(hr)) return -1; // Get a pointer to the Ink object hr = spIInkCollector->get_Ink(&spIInkDisp); if (FAILED(hr)) return -1; // Tell InkCollector the window to collect ink in hr = spIInkCollector->put_hWnd((long)hwnd); if (FAILED(hr)) return -1; // Enable ink input in the window hr = spIInkCollector->put_Enabled(VARIANT_TRUE); if (FAILED(hr)) return -1;

A continuaci贸n, el c贸digo recupera el tama帽o de la secuencia y crea una matriz segura para contener el contenido de la secuencia.

// Now create a variant data type based on the IStream data const LARGE_INTEGER li0 = {0, 0}; ULARGE_INTEGER uli = {0,0}; // Find the size of the stream hr = spStream->Seek(li0, STREAM_SEEK_END, &uli); ASSERT(0 == uli.HighPart); DWORD dwSize = uli.LowPart; // Set uli to point to the beginning of the stream. hr=spStream->Seek(li0, STREAM_SEEK_SET, &uli); ASSERT(SUCCEEDED(hr)); // Create a safe array to hold the stream contents if( SUCCEEDED(hr) ) { VARIANT vtData; VariantInit(&vtData); vtData.vt = VT_ARRAY | VT_UI1; vtData.parray = ::SafeArrayCreateVector(VT_UI1, 0, dwSize); if (vtData.parray) {

Por 煤ltimo, el c贸digo accede a la matriz segura y usa el m茅todo Load del objeto InkDisp para cargar la entrada de l谩piz de la matriz.

DWORD dwRead = 0; LPBYTE pbData = NULL; if (SUCCEEDED(::SafeArrayAccessData(vtData.parray, (void**)&pbData))) { // Read the data from the stream to the varian data and load that into an InkDisp object if (TRUE == spStream->Read(pbData, uli.LowPart, &dwRead) && SUCCEEDED(spIInkDisp->Load(vtData))) { hr = S_OK; } ::SafeArrayUnaccessData(vtData.parray); } ::SafeArrayDestroy(vtData.parray); } } }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有