Не удается получить ITfThreadMgrEx в моей системе XP Professional
Я столкнулся с проблемой с моей XP Professional System при работе с Text Services Framework. Я хочу получить интерфейс ITfThreadMgrEx от ITfThreadMgr. Согласно Microsoft, ITfThreadMgr.QueryInterface() используется для получения ITfThreadMgrEx. Когда я попробовал это в C++, я вернулся E_NOINTERFACE. Согласно Microsoft, ITfThreadMgrEx доступен в Windows 2000 TSF 1.0. Поэтому я просто предположил, что он будет доступен на XP Professional.
Кроме того, я пробовал эту программу на Windows 7, никаких проблем. Тем не менее, в двух разных версиях Windows XP Professional SP3 с установленной поддержкой дальнего востока на разных языках одна и та же проблема в обеих системах.
Достаточно ли кто-нибудь знаком с TSF, чтобы понять, почему я не могу получить интерфейс в соответствии с документацией Microsoft? Любые идеи о том, что я могу попробовать?
HRESULT hr = ::CoInitialize(NULL);
ITfThreadMgr * p = NULL;
ITfThreadMgrEx * pe = NULL;
hr = ::CoCreateInstance(CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC, IID_ITfThreadMgr, (void**)&p);
hr = p->QueryInterface(IID_ITfThreadMgrEx, (void**)&pe);
ОБНОВЛЕНИЕ: я могу получить интерфейс ITfThreadMgr, как только я установлю языки Дальнего Востока и добавлю китайский (PRC) в языковую панель ("Язык и региональные стандарты" на панели управления). Я могу получить этот интерфейс, используя CoCreateInstance(), а также TF_CreateThreadMgr().
Но по какой-то причине интерфейсы, которые QI'd из ITfThreadMgr, которые непосредственно связаны с настройкой компонентов пользовательского интерфейса TIP, недоступны. Я могу получить другие интерфейсы от ITfThreadMgr.QueryInterface, такие как ITfClientId и ITfMessagePump, но я не могу получить ни ITfUIElementMgr, ни ITfThreadMgrEx.
Это похоже на то, что функция пользовательского рисования TIP UI просто не установлена или не включена. Но я не уверен, что это правильное направление.
1 ответ
ITfThreadMgrEx и ITfUIElementMgr доступны только в Vista и выше. Документация MSDN здесь просто неверна.