如何手動啟用自動完成
若要更詳細地控制自動完成行為,或新增自動完成字串的自訂來源,您必須自行管理自動完成物件。 您可以透過下列方式手動啟用自動完成。
指示
建立簡單的自動完成物件
下列步驟示範如何建立和初始化簡單的自動完成物件。 簡單的自動完成物件會從單一來源完成字串。 在此範例中,已刻意省略錯誤檢查。
建立自動完成物件。
IAutoComplete *pac; HRESULT hr = CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pac));
建立自動完成來源。 您可以使用 預先定義的自動完成來源 ,也可以撰寫自己的自訂來源。
下列程式碼會使用其中一個預先定義的自動完成來源。
IUnknown *punkSource; hr = CoCreateInstance(CLSID_ACListISF, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&punkSource));
下列程式碼會使用自訂自動完成來源。 您可以實作公開 IEnumString 介面的物件,以撰寫自己的自動完成來源。 物件也可以選擇性地實作 IACList 和 IACList2 介面。
CCustomAutoCompleteSource *pcacs = new CCustomAutoCompleteSource(); hr = pcacs->QueryInterface(IID_PPV_ARGS(&punkSource)); if(SUCCEEDED(hr)) { // ... } pcacs->Release();
設定自動完成來源上的選項, (選擇性) 。
如果來源公開 IACList2 介面,您可以藉由設定其選項來自訂自動完成來源的行為。 使用預先定義的自動完成來源時,只有CLSID_ACListISF匯出 IACList2。 如需選項及其值的完整清單,請參閱 IACList2::SetOptions。
IACList2 *pal2; hr = punkSource->QueryInterface(IID_PPV_ARGS(&pal2)); if (SUCCEEDED(hr)) { hr = pal2->SetOptions(ACLO_FILESYSONLY); pal2->Release(); }
初始化自動完成物件。
在此範例中, hwndEdit 是要啟用自動完成之編輯控制項視窗的控制碼。 如需最後兩個未使用參數的描述,請參閱 IAutoComplete::Init 。
hr = pac->Init(hwndEdit, punkSource, NULL, NULL);
設定自動完成物件的選項, (選擇性) 。
您可以藉由設定自動完成物件的選項來自訂其行為。 如需選項及其值的完整清單,請參閱 IACList2::SetOptions的檔。
IAutoComplete2 *pac2; hr = pac->QueryInterface(IID_PPV_ARGS(&pac2)); if (SUCCEEDED(hr)) { hr = pac2->SetOptions(ACO_AUTOSUGGEST); pac2->Release(); }
釋放 物件。
注意
即使放開自動完成物件,自動完成物件仍會附加至編輯控制項。 如果您稍後需要存取這些物件—如果您想要稍後變更自動完成選項,例如,您此時不需要發行這些物件。
punkSource->Release(); pac->Release();
建立複合自動完成物件
複合自動完成物件會比對來自多個來源的字串。 例如,Windows Internet Explorer 網址列會使用複合自動完成物件,因為使用者可能會開始輸入檔案或 URL 的名稱。 建立複合自動完成物件所涉及的大部分步驟都與「建立簡單自動完成物件」中的步驟相同。這些步驟會指出如下。
建立自動完成物件。 這與上述步驟 1 相同。
建立自動完成複合來源物件管理員。
自動完成複合來源物件允許將多個自動完成來源合併成單一自動完成來源。
IObjMgr *pom; hr = CoCreateInstance(CLSID_ACLMulti, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pom));
建立並設定每個自動完成來源的選項。 針對每個來源重複上述步驟 2 和 3。
將每個自動完成來源附加至來源物件管理員。
hr = pom->Append(punkSource1); hr = pom->Append(punkSource2);
初始化自動完成物件。
這與上述步驟 4 相同,不同之處在于您不會將簡單的自動完成來源傳遞至 IAutoComplete::Init,而是傳遞複合來源物件管理員。
hr = pac->Init(hwndEdit, pom, NULL, NULL);
設定自動完成物件的選項。 這與上述步驟 5 相同。
釋放 物件。
如同簡單案例,您可以在物件使用完畢後立即釋出物件,但您也可以保留這些物件,以便稍後再變更選項。
pac->Release(); pom->Release(); // Release each individual source. punkSource1->Release(); punkSource2->Release();