+
+[
+ object,
+ uuid(18a4e900-e0ae-11d2-afdd-00105a2799b5),
+ pointer_default(unique)
+]
+interface ITfLangBarEventSink: IUnknown
+{
+ HRESULT OnSetFocus(
+ [in] DWORD dwThreadId);
+
+ HRESULT OnThreadTerminate(
+ [in] DWORD dwThreadId);
+
+ HRESULT OnThreadItemChange(
+ [in] DWORD dwThreadId);
+
+ HRESULT OnModalInput(
+ [in] DWORD dwThreadId,
+ [in] UINT uMsg,
+ [in] WPARAM wParam,
+ [in] LPARAM lParam);
+
+ HRESULT ShowFloating(
+ [in] DWORD dwFlags);
+
+ HRESULT GetItemFloatingRect(
+ [in] DWORD dwThreadId,
+ [in] REFGUID rguid,
+ [out] RECT *prc);
+}
+
+const ULONG TF_LBI_DESC_MAXLEN = 32;
+
+typedef [uuid(12a1d29f-a065-440c-9746-eb2002c8bd19)] struct TF_LANGBARITEMINFO
+{
+ CLSID clsidService;
+ GUID guidItem;
+ DWORD dwStyle;
+ ULONG ulSort;
+ WCHAR szDescription[TF_LBI_DESC_MAXLEN];
+} TF_LANGBARITEMINFO;
+
+[
+ object,
+ uuid(ba468c55-9956-4fb1-a59d-52a7dd7cc6aa),
+ pointer_default(unique),
+]
+interface ITfLangBarItemMgr : IUnknown
+{
+ HRESULT EnumItems(
+ [out] IEnumTfLangBarItems **ppEnum);
+
+ HRESULT GetItem(
+ [in] REFGUID rguid,
+ [out] ITfLangBarItem **ppItem);
+
+ HRESULT AddItem(
+ [in] ITfLangBarItem *punk);
+
+ HRESULT RemoveItem(
+ [in] ITfLangBarItem *punk);
+
+ HRESULT AdviseItemSink(
+ [in] ITfLangBarItemSink *punk,
+ [out] DWORD *pdwCookie,
+ [in] REFGUID rguidItem);
+
+ HRESULT UnadviseItemSink(
+ [in] DWORD dwCookie);
+
+ HRESULT GetItemFloatingRect(
+ [in] DWORD dwThreadId,
+ [in] REFGUID rguid,
+ [out] RECT *prc);
+
+ HRESULT GetItemsStatus(
+ [in] ULONG ulCount,
+ [in, size_is(ulCount)] const GUID *prgguid,
+ [out, size_is(ulCount)] DWORD *pdwStatus);
+
+ HRESULT GetItemNum(
+ [out] ULONG *pulCount);
+
+ HRESULT GetItems(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount), length_is(*pcFetched)] ITfLangBarItem **ppItem,
+ [out, size_is(ulCount), length_is(*pcFetched)] TF_LANGBARITEMINFO *pInfo,
+ [out, size_is(ulCount), length_is(*pcFetched)] DWORD *pdwStatus,
+ [in, out, unique] ULONG *pcFetched);
+
+ HRESULT AdviseItemsSink(
+ [in] ULONG ulCount,
+ [in, size_is(ulCount)] ITfLangBarItemSink **ppunk,
+ [in, size_is(ulCount)] const GUID *pguidItem,
+ [out, size_is(ulCount)] DWORD *pdwCookie);
+
+ HRESULT UnadviseItemsSink(
+ [in] ULONG ulCount,
+ [in, size_is(ulCount)] DWORD *pdwCookie);
+};
+
+[
+ object,
+ uuid(583f34d0-de25-11d2-afdd-00105a2799b5),
+ pointer_default(unique),
+]
+interface IEnumTfLangBarItems : IUnknown
+{
+ HRESULT Clone(
+ [out] IEnumTfLangBarItems **ppEnum);
+
+ HRESULT Next(
+ [in] ULONG ulCount,
+ [out, size_is(ulCount)] ITfLangBarItem **ppItem,
+ [in, out, unique] ULONG *pcFetched);
+
+ HRESULT Reset();
+
+ HRESULT Skip(
+ [in] ULONG ulCount);
+}
+
+[
+ object,
+ uuid(73540d69-edeb-4ee9-96c9-23aa30b25916),
+ pointer_default(unique),
+]
+interface ITfLangBarItem : IUnknown
+{
+ HRESULT GetInfo(
+ [out] TF_LANGBARITEMINFO *pInfo);
+
+ HRESULT GetStatus(
+ [out] DWORD *pdwStatus);
+
+ HRESULT Show(
+ [in] BOOL fShow);
+
+ HRESULT GetTooltipString(
+ [out] BSTR *pbstrToolTip);
+}
+
+[
+ object,
+ uuid(57dbe1a0-de25-11d2-afdd-00105a2799b5),
+ pointer_default(unique),
+]
+interface ITfLangBarItemSink : IUnknown
+{
+ HRESULT OnUpdate(
+ [in] DWORD dwFlags);
+}