使用 ITfRange::SetText 进行预上屏
例子在源码中搜索 : pRange->SetText
HRESULT SetText( [in] TfEditCookie ec, [in] DWORD dwFlags, //源码里是0 [in] const WCHAR *pchText, //字符串的指针 [in] LONG cch //参数3的长度 );
TSF 管理器调用客户端 ITfEditSession::DoEditSession 方法。
TSF 管理器调用客户端 ITfCompositionSink::OnCompositionTerminated 方法。(在终止合成时调用。)
TSF 管理器调用客户端 ITfCleanupContextSink::OnCleanupContext 方法。(在上下文清理操作期间调用。)
TSF 管理器调用客户端 ITfTextEditSink::OnEndEdit 方法。(在 ITfEditSession::DoEditSession 方法完成时接收通知,该方法具有对上下文的读/写访问权限。)
获取途径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 接口由 TSF 管理器实现,文本服务用于获取有关和终止合成的数据。 此接口的实例由 ITfContextComposition::StartComposition 方法提供。
ITfContextComposition* pContextComposition = nullptr; if (FAILED(_pContext->QueryInterface(IID_ITfContextComposition, (void **)&pContextComposition))) { goto Exit; }