预上屏


使用 ITfRange::SetText 进行预上屏

例子在源码中搜索 : pRange->SetText

HRESULT SetText(
  [in] TfEditCookie ec,
  [in] DWORD        dwFlags,   //源码里是0
  [in] const WCHAR  *pchText, //字符串的指针
  [in] LONG         cch  //参数3的长度
);

TfEditCookie如何获取?

ITfRange如何获取?

获取途径1:ITfInsertAtSelection::InsertTextAtSelection 

代码示例源码中搜索  pInsertAtSelection->InsertTextAtSelection


获取途径2:

实例化 ITfComposition 合成对象后,可以通过调用 ITfComposition::GetRange 方法获取指向 ITfRange 接口指针的指针,如以下代码示例所示。

//以下代码来自微软官网
HRESULT         hr;
ITfComposition  *pComposition;
ITfRange        *pRange;
WCHAR           *achBuffer[64];  // 用于接收文本的缓冲区。 
ULONG           cch;

hr = pComposition->GetRange(&pRange);
if(SUCCEEDED(hr))
{
    // Loop to scan text: 

    do
    {
        cch = ARRAYSIZE(achBuffer);
        hr = pRange->GetText(ec, TF_TF_MOVESTART | TF_TF_IGNOREEND, achBuffer, cch, &cch);
        if(SUCCEEDED(hr))
        {
            // 对文本做些什么 

            pRange->Release();
        }
    }
    while (cch == ARRAYSIZE(achBuffer));

    pComposition->Release();
}

可以从TF_SELECTION结构的 range> 元素获取<指向当前 ITfRange 对象的指针。

ITfComposition如何获取?

ITfComposition 接口由 TSF 管理器实现,文本服务用于获取有关和终止合成的数据。 此接口的实例由 ITfContextComposition::StartComposition 方法提供。

ITfContextComposition如何获取?

	ITfContextComposition* pContextComposition = nullptr;
	if (FAILED(_pContext->QueryInterface(IID_ITfContextComposition, (void **)&pContextComposition)))
	{
		goto Exit;
	}