使用IEnumString完成自定义源代码
IAutoComplete custom source with IEnumString
我正在尝试为组合框(win32, c++)或编辑控件实现自动建议。但我不知道如何使用界面IAutoComplete正确。我需要一个自定义的字符串列表,其中匹配的自动建议应该采取的。但是如何实现这个IEnumString?我找到了这个链接,但它并没有揭示一切:http://msdn.microsoft.com/en-us/library/windows/desktop/hh127437%28v=vs.85%29.aspx
有人实现过这个吗?提前感谢迈克尔。
正如我在评论中指出的,ATL已经为您预先写好了一个。
typedef CComEnum<IEnumString,
&IID_IEnumString,
LPOLESTR,
_Copy<LPOLESTR> > CComEnumString;
CComObject<CComEnumString> *pes;
HRESULT hr = CComObject<CComEnumString>::CreateInstance(&pes);
这些代码基本上是从CComEnum文档中偷来的。
好的,在所有答案的帮助下,我到目前为止得到了它:
IAutoComplete *pac;
HRESULT hr = CoCreateInstance(CLSID_AutoComplete,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pac));
typedef CComEnum<IEnumString,
&IID_IEnumString,
LPOLESTR,
_Copy<LPOLESTR> > CComEnumString;
CComObject<CComEnumString> *pes;
HRESULT hRes = CComObject<CComEnumString>::CreateInstance(&pes);
// hRes = pes->Init(
IUnknown* pUnk;
hRes = pes->QueryInterface(IID_IEnumString, (void**) &pUnk);
pac->Init(hEdit, pUnk, NULL, NULL);
// maybe we release ?
pUnk->Release();
IAutoComplete2 *pac2;
if (SUCCEEDED(pac->QueryInterface(IID_IAutoComplete2, (LPVOID*)&pac2)))
{
pac2->SetOptions(ACO_AUTOSUGGEST);
pac2->Release();
}
只剩下一件事:
CComObject *类型的初始化。假设我有一个这样的数组:
std::string myArray[] = { string("abc"), string("foo"), string("muh") };
现在我想把这些字符串填充到pes->Init(…)方法中。这里是如何转换到LPOLESTR的呢?Init(…)方法有一个指向数组开始和结束的指针。结束应该是在最后一个数组元素之后的一个位置,所以这里是myArray[3]吗?我只是问,因为我认为这在这个数组中是越界的?
非常感谢!
相关文章:
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- C++自定义比较函数
- 如何比较自定义类的std::变体
- std::设置自定义比较器
- 如何正确实现和访问运算符的各种自定义枚举器
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 自定义先决条件对移动分配运算符有效吗
- 使用VS Code和CMake Tools运行自定义命令
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- std::ranges::elements_view,用于自定义类似元组的数据
- 跟随整数索引列表的自定义类迭代器
- 参数化自定义CMake工具链
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 如何在自定义类中启用'auto loops'?
- 使用QJsEngine在Qt中注册自定义类型
- Qt自定义QPush按钮未显示在布局上
- 自定义源代码的crypto++
- 使用IEnumString完成自定义源代码
- Libjpeg自定义源代码管理器