好了,所有的答案的幫助下,我得到了它迄今:
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 * PE的初始化。讓我們假設我有這樣一個數組:
std::string myArray[] = { string("abc"), string("foo"), string("muh") };
現在我希望這些字符串被塞入到pes-> Init(...)方法中。如何在這裏實際轉換爲LPOLESTR? Init(...)方法指向這個數組的開始和結束的指針。最後應該是BEYOND最後一個數組元素的位置,那麼這是myArray [3]在這裏?我只是問,因爲我認爲這實際上超出了這個陣列的範圍?
非常感謝!
這也許是延續http://stackoverflow.com/questions/7728103/custom-combobox-win32 –
是的。我不明白它是如何實現的,所以我需要示例代碼。 – Michbeckable
IAutoComplete和WTL對話框的自定義IEnumString實現http://www.codeproject.com/KB/wtl/customautocomplete_wtl.aspx –