영어로 읽기

다음을 통해 공유


자동 완성 사용

자동 완성은 편집 컨트롤 에 부분적으로 입력된 문자열을 전체 문자열로 확장합니다. 예를 들어 사용자가 Windows 인터넷 Explorer 도구 모음에 포함된 주소 편집 컨트롤에 URL을 입력하기 시작하면 자동 완성은 문자열을 기존 부분 문자열과 일치하는 하나 이상의 완전한 URL 옵션으로 확장합니다. "mic"와 같은 부분 URL 문자열을 "https://www.microsoft.com" 또는 "https://www.microsoft.com/windows"로 확장할 수 있습니다. 자동 완성은 일반적으로 편집 컨트롤이나 ComboBoxEx 컨트롤과 같이 포함된 편집 컨트롤이 있는 컨트롤과 함께 사용됩니다.

애플리케이션에 자동 완성 기능 추가

애플리케이션은 다음 두 가지 방법으로 편집 컨트롤에 자동 완성 기능을 추가할 수 있습니다.

  • SHAutoComplete 는 파일 경로 또는 URL을 자동으로 완성할 수 있는 간단한 함수입니다.
  • IAutoComplete 인터페이스는 자동 완성 개체(CLSID_AutoComplete)에 의해 노출됩니다. 이를 통해 애플리케이션은 개체를 초기화, 사용 및 비활성화할 수 있습니다. IAutoComplete 를 사용하면 사용자 지정 원본을 추가하는 기능을 포함하여 자동 완성 원본을 더 많이 제어할 수 있습니다. 이 항목의 나머지 부분에서는 IAutoComplete 사용에 대해 설명합니다. 특정 사용 예제 는 자동 완성을 수동으로 사용하도록 설정하는 방법을 참조하세요.

자동 완성 모드

IAutoComplete를 사용하는 경우 자동 완성은 완성된 문자열을 autoappend 및 autosuggest의 두 가지 모드로 표시할 수 있습니다. 모드는 독립적입니다. 둘 중 하나 또는 둘 다를 사용하도록 설정할 수 있습니다. 모드를 지정하려면 IAutoComplete2::SetOptions를 호출합니다.

자동 적용

자동 적용 모드에서 자동 완성은 가장 가능성이 높은 후보 문자열의 나머지를 기존 문자에 추가하여 추가된 문자를 강조 표시합니다. 사용자가 문자를 계속 입력하면 기존 부분 문자열에 추가됩니다. 사용자가 강조 표시된 다음 문자와 동일한 문자를 추가하면 해당 문자에 대한 강조 표시가 해제됩니다. 나머지 문자는 계속 강조 표시됩니다. 사용자가 강조 표시된 다음 문자와 일치하지 않는 문자를 추가하는 경우 자동 완성은 더 큰 부분 문자열을 기반으로 새 후보 문자열을 생성하려고 시도하고 새 후보 문자열의 나머지를 현재 부분 문자열에 추가합니다. 후보 문자열을 찾을 수 없는 경우 입력된 문자만 나타나고 자동 완성 없이 편집 상자가 동작합니다. 이 프로세스는 사용자가 문자열을 수락할 때까지 계속됩니다.

Autosuggest

자동 완성 모드에서 자동 완성은 편집 컨트롤 아래에 하나 이상의 제안된 전체 문자열이 포함된 드롭다운 목록을 표시합니다. 사용자는 제안된 문자열 중 하나를 선택하거나 계속 입력할 수 있습니다. 입력이 진행되면 현재 부분 문자열에 따라 드롭다운 목록이 수정될 수 있습니다. IAutoComplete2::SetOptions에서 ACO_SEARCH 플래그를 설정하는 경우 자동 완성은 드롭다운 목록 아래쪽에서 현재 부분 문자열을 검색하는 옵션을 제공합니다. 이 옵션은 제안된 문자열이 없더라도 표시됩니다. 사용자가 검색 옵션을 선택하는 경우 애플리케이션은 사용자를 지원하기 위해 검색 엔진을 시작해야 합니다.

미리 정의된 자동 완성 원본 사용

자동 완성은 사용자의 부분 문자열과 일치하는 문자열을 제공하는 원본에 따라 달라집니다. 사용자 지정 자동 완성 원본을 제공하는 옵션이 있지만 시스템에서 가장 일반적인 몇 가지 원본을 제공합니다.

CLSID_ACLHistory

사용자 기록 목록의 URL 목록과 일치하는 자동 완성 원본입니다.

CLSID_ACLMRU

사용자의 최근에 사용한 목록의 URL 목록과 일치하는 자동 완성 원본입니다.

CLSID_ACListISF

셸 네임스페이스의 항목과 일치하는 자동 완성 원본: 사용자 컴퓨터의 파일 및 제어판 같은 가상 폴더의 항목입니다.

리소스를 즉시 해제하는 대신 자동 완성과 관련된 다양한 개체에 대한 인터페이스 포인터를 유지하려는 경우가 있습니다. 특히 자동 완성 동작을 동적으로 조정하려는 경우 이 작업이 수행됩니다. 가장 일반적인 instance 셸 네임스페이스에서 자동 완성되고 현재 디렉터리에서 열거하는 옵션(ACLO_CURRENTDIR)이 있는 CLSID_ACListISF 개체를 사용할 때 발생합니다. 예를 들어 새 폴더로 이동하면 인터넷 Explorer 주소 표시줄의 현재 디렉터리를 변경하므로 설정을 동적으로 변경해야 합니다. CLSID_ACListISF 개체가 현재 디렉터리로 처리해야 하는 디렉터리를 지정하는 방법에는 두 가지가 있습니다.

다음에서는 pal 이 CLSID_ACListISF 개체의 IACList 인터페이스에 대한 포인터라고 가정합니다.

  • IPersistFolder 사용:

    특정 ITEMIDLIST 를 현재 디렉터리로 처리해야 한다고 CLSID_ACListISF 개체에 알리려면 개체의 IPersistFolder 인터페이스를 사용할 수 있습니다. ITEMIDLIST는 가상 폴더를 참조할 수 있으므로 이 메서드는 ICurrentWorkingDirectory를 사용하는 것보다 더 유연합니다.

    다음 예제에서는 간소화된 매개 변수 목록을 허용하는 템플릿화된 QueryInterface를 사용합니다.

    IPersistFolder *ppf;
    
    hr = pal2->QueryInterface(IID_PPV_ARGS(&ppf));   
    if (SUCCEEDED(hr))
    {
        hr = ppf->Initialize(pidlCurrentDirectory);
        ppf->Release();
    }
    
  • ICurrentWorkingDirectory 사용:

    CLSID_ACListISF 개체에 현재 디렉터리로 경로를 제공하려면 개체의 ICurrentWorkingDirectory 인터페이스를 사용할 수 있습니다.

    WCHAR pwszDirectory[MAX_PATH] = L"C:\\Program Files";
    ICurrentWorkingDirectory *pcwd;
    
    hr = pal2->QueryInterface(IID_PPV_ARGS(&pcwd));    
    if (SUCCEEDED(hr))
    {
        hr = pcwd->SetDirectory(pwszDirectory);
        pcwd->Release();
    }