Compartilhar via


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.

  1. Crie o objeto de preenchimento automático.

    IAutoComplete *pac;
    
    HRESULT hr = CoCreateInstance(CLSID_AutoComplete, 
                                    NULL, 
                                  CLSCTX_INPROC_SERVER,
                                  IID_PPV_ARGS(&pac));
    
  2. 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();
    
  3. 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();
    }
    
  4. 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);
    
  5. 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();
    }
    
  6. 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.

  1. Crie o objeto de preenchimento automático. Isso é o mesmo que a etapa 1 acima.

  2. 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));
    
  3. Crie e defina opções para cada uma das fontes de preenchimento automático. Repita as etapas 2 e 3 acima para cada origem.

  4. Anexe cada fonte de preenchimento automático ao gerenciador de objetos de origem.

    hr = pom->Append(punkSource1);
    hr = pom->Append(punkSource2);
    
  5. 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);
    
  6. Defina as opções do objeto de preenchimento automático. Isso é o mesmo que a etapa 5 acima.

  7. 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();