Win32 API 日本語リファレンス
ホームUI.TextServices › ITfThreadMgr

ITfThreadMgr

COM
IIDaa80e801-2021-11d2-93e0-0060b067b86e継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ITfThreadMgr は、TSF マネージャーが実装する中心的なオブジェクトを定義します。ITfThreadMgr は、アプリケーションおよびテキストサービスがテキストサービスの有効化/無効化、ドキュメントマネージャーの作成、ドキュメントコンテキストのフォーカス管理を行うために使用します。

解説(Remarks)

アプリケーションは、次の例のように CLSID_TF_ThreadMgr を指定して CoCreateInstance を呼び出すことで、このインターフェイスへのポインターを取得します。

テキストサービスは、ITfTextInputProcessor::Activate メソッドでこのインターフェイスへのポインターを受け取ります。


HRESULT hr;
ITfThreadMgr* pThreadMgr;

hr = CoCreateInstance(  CLSID_TF_ThreadMgr, 
                        NULL, 
                        CLSCTX_INPROC_SERVER, 
                        IID_ITfThreadMgr, 
                        (void**)&pThreadMgr);

メソッド 11

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Activate(DWORD* ptid)

ITfThreadMgr::Activate メソッド

ptidDWORD*outクライアント識別子を受け取る TfClientId 値へのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ptid が無効です。
E_UNEXPECTED
スレッドが無効化されている最中にこのメソッドが呼び出されました。

解説(Remarks)

このメソッドは 1 つのスレッドから複数回呼び出せますが、各呼び出しは同じスレッドからの対応する ITfThreadMgr::Deactivate の呼び出しと対にする必要があります。

vtbl 4 HRESULT Deactivate()

ITfThreadMgr::Deactivate メソッド

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_UNEXPECTED
スレッドが有効化されている最中にこのメソッドが呼び出されたか、この呼び出しに対応する ITfThreadMgr::Activate の呼び出しがありませんでした。

解説(Remarks)

このメソッドの各呼び出しは、先行する ITfThreadMgr::Activate の呼び出しと対にする必要があります。また、対応する ITfThreadMgr::Activate を呼び出したスレッドと同じスレッドから呼び出す必要があります。

vtbl 5 HRESULT CreateDocumentMgr(ITfDocumentMgr** ppdim)

ITfThreadMgr::CreateDocumentMgr メソッド

ppdimITfDocumentMgr**outドキュメントマネージャーオブジェクトを受け取る ITfDocumentMgr インターフェイスへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppdim が無効です。
E_OUTOFMEMORY
メモリの割り当てに失敗しました。

解説(Remarks)

呼び出し元は、不要になったドキュメントマネージャーを解放する必要があります。

vtbl 6 HRESULT EnumDocumentMgrs(IEnumTfDocumentMgrs** ppEnum)

ITfThreadMgr::EnumDocumentMgrs メソッド

ppEnumIEnumTfDocumentMgrs**out列挙子を受け取る IEnumTfDocumentMgrs インターフェイスへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppEnum が無効です。
E_OUTOFMEMORY
メモリの割り当てに失敗しました。
E_FAIL
不特定のエラーが発生しました。

解説(Remarks)

呼び出し元は、不要になった列挙子を解放する必要があります。

vtbl 7 HRESULT GetFocus(ITfDocumentMgr** ppdimFocus)

ITfThreadMgr::GetFocus メソッド

ppdimFocusITfDocumentMgr**out現在入力フォーカスを持つドキュメントマネージャーを受け取る ITfDocumentMgr インターフェイスへのポインター。フォーカスを持つドキュメントマネージャーが存在しない場合は NULL を受け取ります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
S_FALSE
フォーカスを持つドキュメントマネージャーがありません。ppdimFocus には NULL が設定されます。
E_INVALIDARG
ppdimFocus が無効です。
vtbl 8 HRESULT SetFocus(ITfDocumentMgr* pdimFocus)

ITfThreadMgr::SetFocus メソッド

pdimFocusITfDocumentMgr*in入力フォーカスを受け取る ITfDocumentMgr インターフェイスへのポインター。このパラメーターに NULL を指定することはできません。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pdimFocus が無効です。

解説(Remarks)

アプリケーションは、ドキュメントウィンドウが入力フォーカスを受け取ったときにこのメソッドを呼び出す必要があります。ITfThreadMgr::AssociateFocus を使用してウィンドウとドキュメントマネージャーを関連付けている場合は、TSF マネージャーがアプリケーションに代わってこのメソッドを呼び出します。

vtbl 9 HRESULT AssociateFocus(HWND hwnd, ITfDocumentMgr* pdimNew, ITfDocumentMgr** ppdimPrev)

ITfThreadMgr::AssociateFocus メソッド

hwndHWNDinフォーカスを関連付けるウィンドウのハンドル。
pdimNewITfDocumentMgr*inフォーカスを関連付けるドキュメントマネージャーへのポインター。TSF マネージャーはオブジェクトの参照カウントを増やしません。この値は NULL でもかまいません。
ppdimPrevITfDocumentMgr**outそのウィンドウに以前関連付けられていたドキュメントマネージャーを受け取ります。以前の関連付けがない場合は NULL を受け取ります。このパラメーターに NULL を指定することはできません。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
1 つ以上のパラメーターが無効です。

解説(Remarks)

このメソッドは、アプリケーション開発者の利便性のために用意されています。ウィンドウのフォーカスをドキュメントマネージャーに関連付けると、そのウィンドウがフォーカスを受け取ったときに、TSF マネージャーが関連付けられたドキュメントマネージャーを指定して ITfThreadMgr::SetFocus を自動的に呼び出します。

このメソッドで関連付けられるのは、1 つのウィンドウと 1 つのドキュメントマネージャーだけです。1 つのウィンドウに複数のドキュメントマネージャーを関連付ける場合(またはその逆の場合)、実装側で ITfThreadMgr::SetFocus を呼び出して適切なドキュメントマネージャーにフォーカスを設定する必要があります。

以前のフォーカスの関連付けを復元するには、同じウィンドウハンドルと、最初の呼び出しで ppdimPrev に返された値を pdimNew に指定してこのメソッドを呼び出します。次に例を示します。


//associate the focus for m_hwnd with m_pDocMgr 
pThreadMgr->AssociateFocus(m_hwnd, m_pDocMgr, &m_pPrevDocMgr);



//Restore the original focus association. 
ITfDocumentMgr *pTempDocMgr = NULL;

pThreadMgr->AssociateFocus(m_hwnd, m_pPrevDocMgr, &pTempDocMgr);

if(pTempDocMgr)
{
    pTempDocMgr->Release();
}
    
if(m_pPrevDocMgr)
{
    m_pPrevDocMgr->Release();
}
vtbl 10 HRESULT IsThreadFocus(BOOL* pfThreadFocus)

ITfThreadMgr::IsThreadFocus メソッド

pfThreadFocusBOOL*out呼び出し元スレッドが入力フォーカスを持つかどうかを示す値を受け取る BOOL へのポインター。呼び出し元スレッドがフォーカスを持つ場合は 0 以外の値、持たない場合は 0 を受け取ります。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pfThreadFocus が無効です。
vtbl 11 HRESULT GetFunctionProvider(GUID* clsid, ITfFunctionProvider** ppFuncProv)

ITfThreadMgr::GetFunctionProvider メソッド

clsidGUID*in

取得する関数プロバイダーの CLSID。呼び出し元スレッドに登録された関数プロバイダーの CLSID、または次の定義済みの値のいずれかを指定できます。

意味
GUID_SYSTEM_FUNCTIONPROVIDER
TSF システム関数プロバイダーを取得します。
GUID_APP_FUNCTIONPROVIDER
現在のアプリケーションが実装する関数プロバイダーを取得します。アプリケーションが自身を関数プロバイダーとして登録していない場合、このオブジェクトは利用できません。
ppFuncProvITfFunctionProvider**out関数プロバイダーを受け取る ITfFunctionProvider インターフェイスへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
TF_E_NOPROVIDER
clsid に一致する関数プロバイダーが利用できませんでした。
E_FAIL
GUID_SYSTEM_FUNCTIONPROVIDER が要求されましたが、取得できませんでした。

解説(Remarks)

関数プロバイダーは、IID_ITfFunctionProvider を指定して TSF マネージャーの ITfSourceSingle::AdviseSingleSink メソッドを呼び出すことで登録します。

vtbl 12 HRESULT EnumFunctionProviders(IEnumTfFunctionProviders** ppEnum)

ITfThreadMgr::EnumFunctionProviders メソッド

ppEnumIEnumTfFunctionProviders**out関数プロバイダーの列挙子を受け取る IEnumTfFunctionProviders インターフェイスのアドレス。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppEnum が無効です。
E_OUTOFMEMORY
メモリの割り当てに失敗しました。
E_FAIL
不特定のエラーが発生しました。

解説(Remarks)

列挙子には、登録された関数プロバイダーのみが含まれます。ITfThreadMgr::GetFunctionProvider で説明されている定義済みの関数プロバイダーは含まれません。

関数プロバイダーは、IID_ITfFunctionProvider を指定して TSF マネージャーの ITfSourceSingle::AdviseSingleSink メソッドを呼び出すことで自身を登録します。

vtbl 13 HRESULT GetGlobalCompartment(ITfCompartmentMgr** ppCompMgr)

ITfThreadMgr::GetGlobalCompartment メソッド

ppCompMgrITfCompartmentMgr**outグローバルコンパートメントマネージャーを受け取る ITfCompartmentMgr インターフェイスへのポインター。

戻り値

このメソッドは次のいずれかの値を返します。

説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppCompMgr が無効です。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ITfThreadMgr "{AA80E801-2021-11D2-93E0-0060B067B86E}"
#usecom global ITfThreadMgr IID_ITfThreadMgr "{}"
#comfunc global ITfThreadMgr_Activate               3 var
#comfunc global ITfThreadMgr_Deactivate             4
#comfunc global ITfThreadMgr_CreateDocumentMgr      5 sptr
#comfunc global ITfThreadMgr_EnumDocumentMgrs       6 sptr
#comfunc global ITfThreadMgr_GetFocus               7 sptr
#comfunc global ITfThreadMgr_SetFocus               8 sptr
#comfunc global ITfThreadMgr_AssociateFocus         9 sptr,sptr,sptr
#comfunc global ITfThreadMgr_IsThreadFocus          10 var
#comfunc global ITfThreadMgr_GetFunctionProvider    11 var,sptr
#comfunc global ITfThreadMgr_EnumFunctionProviders  12 sptr
#comfunc global ITfThreadMgr_GetGlobalCompartment   13 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。