我正在实现一个自定义 IEnumString 以用作 IAutoComplete2 对象的数据集。
问题在于,当在编辑框中输入第一个字符时,IAutoComplete2 似乎仅在我的 IEnumString 上调用 reset ,然后依赖于数据集在后续按键期间保持静态(并在此之后进行本地过滤)这一事实。
我试图删除 IAutoComplete2 对象,然后立即创建一个新对象并将其附加到控件,但这会导致 shell32 崩溃。
这甚至可能吗?
我正在实现一个自定义 IEnumString 以用作 IAutoComplete2 对象的数据集。
问题在于,当在编辑框中输入第一个字符时,IAutoComplete2 似乎仅在我的 IEnumString 上调用 reset ,然后依赖于数据集在后续按键期间保持静态(并在此之后进行本地过滤)这一事实。
我试图删除 IAutoComplete2 对象,然后立即创建一个新对象并将其附加到控件,但这会导致 shell32 崩溃。
这甚至可能吗?
当你想重置枚举时,你应该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());