0

这是我在 TSF 中初始化和注册的代码:

::OleInitialize(NULL);

HRESULT hr=CoCreateInstance(CLSID_TF_ThreadMgr,NULL,CLSCTX_INPROC_SERVER,IID_ITfThreadMgr,(void **)&pThreadMgr);
if (FAILED(hr) || pThreadMgr==null) return;

hr=pThreadMgr->Activate(&ClientId);
if (FAILED(hr)) return;

hr=pThreadMgr->CreateDocumentMgr(&pDocumentMgr);
if (FAILED(hr) || pDocumentMgr==null) return;


pTextStore=new CTextStore();   // create my ITextStoreACP store

hr=pDocumentMgr->CreateContext(ClientId,0,reinterpret_cast<ITextStoreACP *>pTextStore,&pContext,&EditCookie);
if (FAILED(hr) || pContext==null) goto END;

hr=pDocumentMgr->Push(pContext);
if (FAILED(hr)) return;

在这段代码的最后,我的 TextStore 接口获得了 GetTextView、GetStatus 和 GetWnd 调用。但是,当我对着麦克风讲话时,没有收到对 SetText() 或任何其他方法的调用。而是显示默认的听写便笺簿。我不希望暂存器出现。我需要将文本路由到我的 TextStore。我需要向语音引擎注册 TextStoreACP 接口吗?我在这里想念什么?有任何想法吗?

4

1 回答 1

0

应用程序窗口需要指定为文档管理器的焦点窗口:

pThreadMgr->AssociateFocus(hWnd, pDocumentMgr, &pPrevDocumentMgr);

在此调用之后,TSF 开始将语音调用路由到 ITextStoreACP 接口。

于 2015-08-17T20:51:54.940 回答