若要更詳細地控制自動完成行為,或新增自定義的自動完成字串來源,您必須自行管理自動完成物件。 您可以透過下列方式手動啟用自動完成。
使用說明
建立簡單的自動完成物件
下列步驟示範如何建立和初始化簡單的自動完成物件。 簡單的自動完成功能會從單一來源補全字串。 本範例中已刻意省略錯誤檢查。
建立自動完成物件。
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();