자동 완성 동작에 대한 자세한 제어를 얻거나 자동 완성 문자열의 사용자 지정 소스를 추가하려면 자동 완성 개체를 직접 관리해야 합니다. 다음과 같은 방법으로 자동 완성을 수동으로 사용하도록 설정할 수 있습니다.
지시
단순 자동 완성 개체 만들기
다음 단계에서는 간단한 자동 완성 개체를 만들고 초기화하는 방법을 보여줍니다. 간단한 자동 완성 개체는 단일 소스에서 문자열을 완료합니다. 이 예제에서는 오류 검사가 의도적으로 생략되었습니다.
자동 완성 개체를 만듭니다.
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();
복합 자동 완성 개체 만들기
복합 자동 완성 개체는 여러 소스의 문자열과 일치합니다. 예를 들어 사용자가 파일 또는 URL의 이름을 입력하기 시작할 수 있으므로 Windows Internet Explorer 주소 표시줄은 복합 자동 완성 개체를 사용합니다. 복합 자동 완성 개체를 만드는 데 관련된 대부분의 단계는 "단순 자동 완성 개체 만들기"의 단계와 동일합니다. 이러한 단계는 다음과 같이 표시됩니다.
자동 완성 개체를 만듭니다. 이는 위의 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);자동 완성 개체를 초기화합니다.
이는 간단한 자동 완성 원본을 IAutoComplete::Init전달하는 대신 복합 원본 개체 관리자를 전달한다는 점을 제외하고 위의 4단계와 동일합니다.
hr = pac->Init(hwndEdit, pom, NULL, NULL);자동 완성 개체의 옵션을 설정합니다. 이는 위의 5단계와 동일합니다.
개체를 해제합니다.
간단한 경우와 마찬가지로 개체 사용을 마치자마자 개체를 해제할 수 있지만 나중에 옵션을 변경하도록 유지할 수도 있습니다.
pac->Release(); pom->Release(); // Release each individual source. punkSource1->Release(); punkSource2->Release();