Принуждение IAutoComplete для обновления набора данных?

Я реализую пользовательский IEnumString для использования в качестве набора данных для объекта IAutoComplete2.

Проблема заключается в том, что IAutoComplete2, по-видимому, вызывает сброс только в моем IEnumString, когда первый символ вводится в поле ввода, а затем полагается на тот факт, что набор данных остается статическим (и выполняет локальную фильтрацию после этого) во время последующих нажатий клавиш.

Я попытался удалить объект IAutoComplete2, а затем немедленно создать новый и прикрепить его к элементу управления, но это привело к сбою в shell32.

Это вообще возможно?

1 ответ

Решение

Если вы хотите сбросить перечисление, вы должны QueryInterface ваш IAutoComplete интерфейс для IAutoCompleteDropDown а затем позвоните ResetEnumerator,

Создание:

    CComPtr<IAutoComplete> m_spAutoComplete;

    CHECKHR(CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_spAutoComplete)));

Когда вы хотите сбросить перечисление:

    CComPtr<IAutoCompleteDropDown> spAutoCompleteDD;
    CHECKHR(m_spAutoComplete->QueryInterface(IID_PPV_ARGS(&spAutoCompleteDD)));
    CHECKHR(spAutoCompleteDD->ResetEnumerator()); 
Другие вопросы по тегам