Como habilitar o preenchimento automático manualmente
Para obter um controle mais detalhado sobre o comportamento de preenchimento automático ou para adicionar uma fonte personalizada de cadeias de caracteres de preenchimento automático, você deve gerenciar o objeto de preenchimento automático por conta própria. Você pode habilitar o preenchimento automático manualmente das seguintes maneiras.
Instruções
Criando um objeto de preenchimento automático simples
As etapas a seguir mostram como criar e inicializar um objeto de preenchimento automático simples. Um objeto de preenchimento automático simples conclui cadeias de caracteres de uma única fonte. A verificação de erros foi intencionalmente omitida neste exemplo.
Crie o objeto de preenchimento automático.
IAutoComplete *pac; HRESULT hr = CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pac));
Crie a fonte de preenchimento automático. Você pode usar uma fonte de preenchimento automático predefinida ou pode escrever sua própria fonte personalizada.
O código a seguir usa uma das fontes de preenchimento automático predefinidas.
IUnknown *punkSource; hr = CoCreateInstance(CLSID_ACListISF, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&punkSource));
O código a seguir usa uma fonte de preenchimento automático personalizada. Você pode escrever sua própria fonte de preenchimento automático implementando um objeto que expõe a interface IEnumString . O objeto também pode, opcionalmente, implementar as interfaces IACList e IACList2 .
CCustomAutoCompleteSource *pcacs = new CCustomAutoCompleteSource(); hr = pcacs->QueryInterface(IID_PPV_ARGS(&punkSource)); if(SUCCEEDED(hr)) { // ... } pcacs->Release();
Defina as opções na origem do preenchimento automático (opcional).
Você pode personalizar o comportamento da fonte de preenchimento automático definindo suas opções se a origem expor a interface IACList2 . Ao usar as fontes de preenchimento automático predefinidas, somente CLSID_ACListISF exporta IACList2. Para obter uma lista completa de opções e seus valores, consulte IACList2::SetOptions.
IACList2 *pal2; hr = punkSource->QueryInterface(IID_PPV_ARGS(&pal2)); if (SUCCEEDED(hr)) { hr = pal2->SetOptions(ACLO_FILESYSONLY); pal2->Release(); }
Inicialize o objeto de preenchimento automático.
Neste exemplo, hwndEdit é o identificador da janela de controle de edição para a qual o preenchimento automático deve ser habilitado. Consulte IAutoComplete::Init para obter uma descrição dos dois últimos parâmetros não utilizados.
hr = pac->Init(hwndEdit, punkSource, NULL, NULL);
Defina as opções do objeto de preenchimento automático (opcional).
Você pode personalizar o comportamento do objeto de preenchimento automático definindo suas opções. Para obter uma lista completa de opções e seus valores, consulte a documentação de IACList2::SetOptions.
IAutoComplete2 *pac2; hr = pac->QueryInterface(IID_PPV_ARGS(&pac2)); if (SUCCEEDED(hr)) { hr = pac2->SetOptions(ACO_AUTOSUGGEST); pac2->Release(); }
Solte os objetos.
Observação
O objeto de preenchimento automático permanece anexado ao controle de edição mesmo depois de liberá-lo. Se você prever a necessidade de acessar esses objetos posteriormente, se quiser alterar as opções de preenchimento automático posteriormente, por exemplo, não será necessário liberá-los neste momento.
punkSource->Release(); pac->Release();
Criando um objeto de preenchimento automático composto
Um objeto de preenchimento automático composto corresponde às cadeias de caracteres de várias fontes. Por exemplo, a barra de Endereços Explorer da Internet do Windows usa um objeto de preenchimento automático composto porque o usuário pode começar a digitar o nome de um arquivo ou uma URL. A maioria das etapas envolvidas na criação de um objeto de preenchimento automático composto é idêntica às etapas em "Criando um objeto de preenchimento automático simples". Essas etapas são indicadas como tal.
Crie o objeto de preenchimento automático. Isso é o mesmo que a etapa 1 acima.
Crie o gerenciador de objetos de origem composta de preenchimento automático.
O objeto de origem composta de preenchimento automático permite que várias fontes de preenchimento automático sejam combinadas em uma única fonte de preenchimento automático.
IObjMgr *pom; hr = CoCreateInstance(CLSID_ACLMulti, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pom));
Crie e defina opções para cada uma das fontes de preenchimento automático. Repita as etapas 2 e 3 acima para cada origem.
Anexe cada fonte de preenchimento automático ao gerenciador de objetos de origem.
hr = pom->Append(punkSource1); hr = pom->Append(punkSource2);
Inicialize o objeto de preenchimento automático.
Isso é o mesmo que a etapa 4 acima, exceto que, em vez de passar a fonte de preenchimento automático simples para IAutoComplete::Init, você passa o gerenciador de objetos de origem composta.
hr = pac->Init(hwndEdit, pom, NULL, NULL);
Defina as opções do objeto de preenchimento automático. Isso é o mesmo que a etapa 5 acima.
Solte os objetos.
Como no caso simples, você pode liberar os objetos assim que terminar de usá-los, mas também pode retê-los para alterar as opções mais tarde.
pac->Release(); pom->Release(); // Release each individual source. punkSource1->Release(); punkSource2->Release();