다음을 통해 공유


입력 패널 자동 완성 사용

Windows Vista에서 태블릿 PC 입력 패널은 입력 패널에서 사용자의 잉크가 인식되므로 애플리케이션의 자동 완성 목록을 실시간으로 업데이트할 수 있는 새로운 자동 완성 기능을 통합합니다. 또한 애플리케이션의 자동 완성 목록은 입력 패널 사용자에게 편리한 위치에 배치됩니다. 입력 패널 자동 완성이 없으면 입력 패널에서 자동 완성 기능을 사용하는 것은 어려운 프로세스이므로 사용자가 자동 완성 제안에 액세스하기 위해 한 번에 한 문자를 삽입하고 입력 패널을 이동해야 합니다. 통합을 통해 자동 완성은 태블릿 PC 사용자를 위한 강력한 도구로, 입력 패널을 사용하여 텍스트를 입력하는 속도를 높이고 쉽게 입력할 수 있습니다.

입력 패널(즉, 자동 완성 목록 포함)

애플리케이션이 입력 패널 자동 완성 통합을 활용하는 방법에 대한 세 가지 옵션이 있습니다. 셸 자동 완성(IAutoComplete 인터페이스를 통해) 또는 .NET Framework 자동 완성(AutoCompleteMode 열거형을 통해)을 사용하여 빌드된 자동 완성 기능이 포함된 애플리케이션은 코드 변경 없이 입력 패널 자동 완성 통합을 수신합니다. 사용자 지정 자동 완성 텍스트 필드를 포함하는 애플리케이션은 입력 패널 자동 완성 API를 사용하여 동일한 기능을 가져올 수 있습니다.

모든 경우에 애플리케이션에서 자동 완성 목록을 생성하는 데 사용하는 UI 또는 예측 논리를 복제하거나 수정하지 않고도 애플리케이션의 자동 완성 목록을 수정할 수 있습니다. 자동 완성 목록은 애플리케이션에서 계속 소유자로 그려지고 자동 완성 목록의 내용은 텍스트가 편집 필드에 직접 입력된 경우와 동일합니다.

입력 패널 자동 완성 통합은 Windows Vista 운영 체제 이상 버전에서 지원됩니다. 입력 패널 자동 완성 통합은 Windows Vista부터 시작하여 .NET Framework 버전 3.0부터 Windows Forms 개발에 셸 자동 완성에 기본 제공됩니다. IAutoCompleteAutoCompleteMode는 모두 이전 버전의 Windows에서 실행되지만 입력 패널 자동 완성 통합은 Microsoft Windows XP 태블릿 PC 버전 또는 이전 운영 체제에서 지원되지 않습니다. 이전 버전의 Tablet PC에서 입력 패널 자동 완성을 실행하는 경우 애플리케이션은 사전 통합 동작으로 되돌리기.

애플리케이션 자동 완성 목록을 입력 패널과 통합하는 이유

애플리케이션의 자동 완성 목록을 통합하면 자동 완성 기능이 포함된 텍스트 필드에 텍스트를 입력하는 사용자에게 입력의 최대 용이성과 속도를 제공할 수 있습니다. 또한 입력판 자동 완성 통합이 포함된 애플리케이션은 태블릿 PC를 염두에 두고 개발된 것처럼 즉시 나타나므로 태블릿 PC 사용자에게 더 매력적인 애플리케이션이 됩니다.

통합 없이 입력 패널 및 자동 완성 목록이 상호 작용하는 방법

입력 패널을 사용하여 자동 완성 목록을 포함하지만 입력 패널과 통합되지 않은 텍스트 필드에 텍스트를 입력합니다.

  1. 사용자가 텍스트 필드에 포커스를 배치하고 입력 패널을 엽니다.
  2. 사용자는 하나 또는 두 개의 문자를 씁니다.
  3. 사용자가 삽입을 탭합니다. 입력 패널은 애플리케이션의 텍스트 필드에 텍스트를 입력합니다. 애플리케이션의 자동 완성 목록이 나타나고 입력 패널에 의해 부분적으로 또는 완전히 가려질 가능성이 큽니다.
  4. 사용자가 입력 패널을 끌어 애플리케이션의 자동 완성 목록을 끕니다.
  5. 올바른 항목이 자동 완성 목록에 포함되어 있다고 가정하면 사용자는 이제 해당 항목을 선택할 수 있습니다. 그렇지 않으면 사용자는 2단계와 3단계를 반복해야 합니다.

이것은 분명히 번거로운 프로세스입니다. 자동 완성 목록이 작동하는 방식에 대한 사용자의 기대는 파선으로 표시되며 작업을 수행하는 기능이 저하됩니다.

입력 패널 및 자동 완성 목록 상호 작용이 통합과 함께 개선되는 방법

입력 패널을 사용하여 입력 패널과 통합된 자동 완성 목록이 포함된 텍스트 필드에 텍스트를 입력합니다.

  1. 사용자가 텍스트 필드에 포커스를 배치하고 입력 패널을 엽니다.
  2. 사용자는 하나 또는 두 개의 문자를 씁니다. 사용자가 텍스트를 쓸 때 애플리케이션의 자동 완성 목록이 입력 패널 바로 위 또는 바로 아래에 표시됩니다.
  3. 사용자가 자동 완성 목록에서 항목을 선택합니다. 항목이 애플리케이션의 텍스트 필드에 직접 삽입되거나 사용자가 올바른 항목이 나타날 때까지 2단계를 반복합니다.

통합으로 인해 사용자가 입력 패널에서 작성하는 동안 자동 완성 목록이 나타나고 업데이트됩니다. 또한 사용자가 입력 패널에 의해 가려지지 않고 작성하는 동안 액세스하는 것이 편리하도록 목록이 배치됩니다. 마지막으로 사용자가 자동 완성 목록에서 항목을 선택하면 항목이 애플리케이션의 텍스트 입력 필드에 직접 삽입되므로 사용자가 입력 패널에서 텍스트를 삽입하는 단계를 무시할 수 있습니다.

outlook Express 자동 완성 목록이 있는 입력 패널

입력 패널 자동 완성 통합을 포함하는 표준 자동 완성 구성 요소

IAutoCompleteAutoCompleteMode 모두 입력 패널 자동 완성의 기본 제공 통합을 포함합니다. 이러한 표준 자동 완성 구성 요소 중 하나를 사용하는 애플리케이션은 추가 작업이 거의 또는 전혀 없는 입력 패널 자동 완성 기능을 활용할 수 있습니다. 또한 입력판 자동 완성은 Windows Vista 또는 새 버전의 Windows 운영 체제에서만 지원되지만 Windows Vista 릴리스 전에 IAutoComplete 를 사용하여 빌드된 애플리케이션은 Windows Vista에서 실행할 때 입력 패널 자동 완성 통합을 자동으로 가져옵니다. 다음 섹션에는 입력 패널 자동 완성 통합을 포함하는 특정 IAutoComplete 및 AutoCompleteMode 요소에 대한 자세한 정보가 포함되어 있습니다.

입력 패널 자동 완성 통합을 사용하여 셸 자동 완성

IAutoComplete를 사용하는 애플리케이션은 입력 패널 자동 완성 통합을 무료로 가져옵니다. 셸 자동 완성 API는 Windows 2000 이상에 포함되어 있지만 입력 패널 자동 완성 통합은 Windows Vista 및 최신 버전에서만 지원됩니다. 그러나 IAutoComplete 를 사용하는 Windows Vista 릴리스 이전에 빌드된 애플리케이션은 Windows Vista에서 실행될 때 입력 패널 자동 완성 통합을 자동으로 가져옵니다.

이러한 방식으로 태블릿 자동 완성을 활용하려면 자동 완성 개체(CLSID_Autocomplete)를 사용해야 합니다. URL 또는 파일 이름에 자동 완성 기능을 제공하려면 SHAutoComplete 함수를 사용하여 자동 완성 개체를 만듭니다.

IAutoComplete 외에도 IAutoComplete2 또는 IAutoCompleteDropDown을 직접 구현하고 입력 패널 자동 완성 통합을 자동으로 가져올 수 있습니다.

입력 패널 .NET Framework 애플리케이션과 자동 완성 통합

.NET Framework 3.0부터 Windows Forms 텍스트 상자에 자동 완성이 포함됩니다. Windows Forms 텍스트 상자 자동 완성은 셸 자동 완성을 기반으로 빌드됩니다. 즉, 입력 패널 자동 완성 통합도 기본 제공됩니다. .NET Framework 3.0은 Windows Vista 이전에 릴리스된 Windows 버전에서 하위 수준으로 지원됩니다. 그러나 입력 패널 자동 완성 통합은 Windows Vista 이상 버전에서만 지원되므로 입력 패널 자동 완성 통합은 Windows Vista 이상 버전에 설치된 경우 .NET Framework 3.0 애플리케이션에서만 작동합니다.

.NET Framework 3.0에서 입력 패널 자동 완성 통합을 활용하려는 애플리케이션은 AutoCompleteMode 속성을 사용하도록 설정된 Windows Forms TextBox를 사용해야 합니다. 입력 패널 자동 완성 통합을 활용하기 위해 자동 완성 Windows Forms 작업을 수행하는 것 외에는 추가 작업을 수행할 필요가 없습니다.

입력 패널 자동 완성 API 직접 사용

사용자 지정 자동 완성 텍스트 상자의 개발자는 입력 패널 자동 완성 통합이 애플리케이션에서 사용할 수 있는 향상된 텍스트 입력 환경을 얻으려면 입력 패널 자동 완성 API와 직접 작업해야 합니다. 입력 패널 자동 완성 API는 Windows Vista 운영 체제의 일부 및 태블릿 플랫폼 SDK 버전 1.9 이상의 일부로 포함됩니다. 입력 패널 자동 완성 인터페이스는 COM 기반 인터페이스입니다.

다음 섹션에서는 C++ 애플리케이션에 대해 이러한 인터페이스의 작동에 대해 자세히 설명합니다. 그러나 이러한 COM 인터페이스는 COM Interop을 사용하여 C#을 비롯한 대부분의 언어로 구현할 수 있습니다.

사용자 지정 자동 완성 텍스트 상자에서 입력 패널 자동 완성 통합을 구현하기 위해 필요한 두 인터페이스는 ITipAutocompleteProvider 인터페이스ITipAutocompleteClient 인터페이스입니다. 이러한 인터페이스에 대한 정의는 TipAutoComplete.h 및 TipAutoComplete_i.c에 있습니다.

먼저 애플리케이션은 자동 완성 목록을 포함하는 각 텍스트 항목 필드에 대해 ITipAutocompleteProvider 를 구현하는 자동 완성 공급자 클래스를 정의하고 인스턴스화해야 합니다. 이 클래스는 자동 완성 통합의 애플리케이션 측면을 관리합니다. 입력 패널의 모든 자동 완성 요청은 애플리케이션의 자동 완성 공급자를 통해 자동 완성 클라이언트에서 애플리케이션으로 이루어집니다. 애플리케이션의 자동 완성 공급자는 애플리케이션의 자동 완성 목록에 대한 HWND와 연결된 텍스트 입력 필드의 HWIND에 모두 액세스할 수 있어야 합니다. 또한 다음 ITipAutocompleteProvider 메서드를 구현해야 합니다.

  • ITipAutocompleteProvider::UpdatePendingText 메서드: 이 메서드는 자동 완성 클라이언트에서 사용자가 입력 패널에 쓴 텍스트를 애플리케이션에 알리는 데 사용됩니다. 이 알림을 받으면 공급자는 텍스트가 애플리케이션의 텍스트 입력 필드에 입력된 것처럼 자동 완성 목록을 생성할 책임이 있습니다. ITipAutocompleteProvider::UpdatePendingText 메서드를 통해 자동 완성 공급자에 전달되는 문자열에는 현재 입력 패널에 있는 텍스트만 포함됩니다. 따라서 텍스트 입력 필드에 추가 텍스트가 있는 경우 클라이언트에서 보낸 텍스트에 해당 텍스트를 제대로 추가하는 것은 공급자의 책임입니다. ITipAutocompleteProvider::UpdatePendingText 메서드의 문자열 전달은 필드의 현재 선택 항목을 대체하는 것으로 처리되어야 합니다. 현재 선택 영역이 없으면 현재 삽입 지점의 위치에 배치해야 합니다. 자동 완성 목록이 생성되면 공급자는 ITipAutocompleteProvider::Show 메서드 를 호출하여 TRUE 를 전달하여 자동 완성 목록을 표시해야 합니다. 애플리케이션은 UpdatePendingText 에 대한 호출을 캐시하지 말고 UpdatePendingText에 대한 각 추가 호출을 이전 호출의 취소로 처리하여 오래된 자동 완성 목록 UI가 깜박이지 않도록 합니다. 다음 예제 코드에서는 이러한 사례를 보여 줍니다.

    HRESULT SampleProvider::UpdatePendingText(BSTR bstrPendingText)
    {
       //Discard previously cached pending text from Input Panel
       m_bstrPending.Empty();
        //Store the new pending text from Input Panel as m_bstrPending
    m_bstrPending = bstrPendingText;
    
        //Get the text from the field in two chunks. The characters to
    //the left of the selection and the characters to the right.
    CComBSTR bstrLeftContext = //Text to the left of the selection
            CComBSTR bstrRightContext = //Text to the right of the selection
    
    //Discard previously cached complete text
        m_bstrCompleteText.Empty();
        //Append to the field text from the left of the selection
        //the text from Input Panel and then append to that
        //the field text to the right of the selection
        m_bstrCompleteText.Append(bstrLeftContext);
        m_bstrCompleteText.Append(m_bstrPending);
        m_bstrCompleteText.Append(bstrRigtContext);
    
        //Update the app's AC list based on m_bstrCompleteText
        //...
    
        //Show the updated AC list by calling the provider's Show method
       Show(true);
       return S_OK;
    }
    
  • ITipAutocompleteProvider::Show 메서드: 이 메서드는 UpdatePendingText에서 호출되지만 언제든지 자동 완성 클라이언트에서 호출할 수도 있습니다. 이 호출을 받으면 자동 완성 공급자는 매개 변수에 표시된 대로 자동 완성 공급자를 숨기거나 표시해야 합니다. 자동 완성 목록을 표시하기 전에 자동 완성 공급자는 자동 완성 목록을 배치할 위치에 대해 자동 완성 클라이언트에 문의해야 합니다. 자동 완성 목록의 위치 지정에 대한 자세한 내용은 이 문서의 뒷부분에 나와 있습니다.

다음으로, 애플리케이션은 ATL(Active Template Library) CoCreateInstance 함수를 사용하여 클래스 ID가 in-process 서버로 CLSID_TipAutoCompleteClient ITipAutocompleteClient 인터페이스instance 생성한 다음 클라이언트에 공급자를 등록해야 합니다. Autocomplete 클라이언트 ITipAutocompleteClient::AdviseProvider 메서드 는 클라이언트가 애플리케이션의 Autocomplete 공급자 개체를 호출할 수 있도록 공급자를 클라이언트에 등록합니다. 시스템에 tiptsf.dll 없는 경우 CoCreateInstance 함수가 실패하고 REGDB_E_CLASSNOTREG 반환합니다. 이 시점에서 애플리케이션은 ITipAutocompleteProvider 개체를 삭제하고 입력 패널이 없는 것처럼 진행할 수 있습니다. 이러한 시스템에는 없기 때문입니다.

애플리케이션은 ITipAutocompleteClient의 instance 하나 또는 텍스트 필드당 하나의 instance 만들도록 선택할 수 있습니다. 첫 번째 옵션을 사용하려면 포커스가 변경될 때마다 공급자를 등록 취소하고 등록해야 합니다. 자동 완성 공급자 등록 취소에 대한 자세한 내용은 이 항목의 뒷부분에 나와 있습니다.

자동 완성 공급자(애플리케이션)와 자동 완성 클라이언트(입력 패널) 간에 조정해야 하는 자동 완성 목록의 위치 지정과 관련된 몇 가지 단계가 있습니다. 자동 완성 목록을 표시하기 전에 자동 완성 공급자의 Show 메서드를 호출한 결과 또는 사용자가 키보드를 사용하여 텍스트를 입력하기 때문에 공급자는 자동 완성 목록을 배치할 위치에 대해 클라이언트에 문의해야 합니다. 공급자는 다음 단계를 수행해야 합니다.

  • 자동 완성 클라이언트의 ITipAutocompleteClient::RequestShowUI 메서드 를 사용하여 입력 패널이 자동 완성 목록을 표시할 준비가 되었는지 여부를 확인합니다. RequestShowUI 는 자동 완성 목록 창의 HWND인 HWND 매개 변수를 사용하고 메서드는 TRUE 또는 FALSE 를 반환하여 자동 완성 목록을 표시할 수 있는 상태인지 여부를 나타냅니다. 클라이언트가 FALSE를 반환하는 경우 공급자는 자동 완성 목록을 표시하려고 시도해서는 안 됩니다.

  • RequestShowUI를 호출하여 ITipAutocompleteClient::P referredRects 메서드를 호출하기 전에 팝업 자동 완성 목록 창 핸들을 설정합니다. 이렇게 하지 않으면 PreferredRects를 호출할 때 E_INVALIDARG 오류가 발생합니다.

  • RequestShowUITRUE를 반환하는 경우 공급자는 텍스트 입력 필드의 위치에 따라 자동 완성 목록의 기본 화면 좌표 사각형을 계산한 다음 Autocomplete 클라이언트의 ITipAutocompleteClient::P referredRects 메서드를 호출해야 합니다. 이렇게 하면 자동 완성 클라이언트가 자동 완성 목록이 입력 패널과 겹치지 않도록 사각형을 조정할 수 있습니다. PreferredRects 메서드는 다음 네 가지 매개 변수를 사용합니다.

    • RECT rcACList: 자동 완성 목록의 기본 화면 좌표 사각형입니다.
    • RECT rcField: 해당 텍스트 입력 필드의 화면 좌표 사각형입니다.
    • RECT *prcModifiedACList: 자동 완성에 대해 조정된 화면 좌표 사각형
    • BOOL *pfShowAbove: 이 매개 변수는 prcModifiedACList 사각형이 입력 패널 위 또는 아래에 자동 완성 목록을 배치하는지 여부를 공급자에게 나타냅니다. 애플리케이션은 이 정보를 사용하여 핸들 크기 조정 및 스크롤 막대와 같은 UI 요소를 올바르게 그릴 수 있습니다. 공급자는 처음에 rcACList를 통해 텍스트 입력 필드를 기준으로 자동 완성 목록이 배치되는 방향으로 전달되어야 합니다. prcModifiedACListrcACList와 동일하게 설정하는 경우 클라이언트는 pfShowAbove를 변경하지 않습니다.

    prcModifiedACListpfShowAbove out 인수의 반환 값을 사용하여 자동 완성 목록 창을 배치하고 표시합니다. 입력 패널이 사용되지 않는 경우 RequestShowUI 는 항상 TRUE 를 반환하고 prcModifiedACList 는 항상 rcACList와 동일합니다. pfShowAbove 도 변경되지 않습니다. 그 결과 호출이 애플리케이션 동작에 영향을 주지 않습니다. 다음 예제 코드에서는 이러한 사례를 보여 줍니다.

HRESULT SampleProvider::Show(BOOL fShow)
{
    //Ask the AC client if it is OK to show the Autocomplete list.
    BOOL fAllowShowing = FALSE;
    m_spACClient->RequestShowUI(m_hWndList, &fAllowShowing);

    if (fShow && fAllowingShowing)
        {
            // Create the parameters required to call PreferredRects
            RECT rcField = //Rectangle for app's text field
            RECT rcACList = //Default rectangle for app's AC list
            RECT rcModifiedACList = {0, 0, 0, 0};
            BOOL fShowAbove = TRUE;

//Ask the AC client to modify the position of the AC list
m_spACClient->PreferredRects(&rcACList, &rcField,
&rcModifiedACList, &fShowAbove);

            //Show the Autocomplete UI at the modified preferred rectangle
            //from rcModifiedACList and the directional info provide by
//fShowAbove
            //...
        }
    else
        {
        //Hide the Autocomplete list and clean up
        //...
        }
    return S_OK;
}

사용자가 자동 완성 목록에서 항목을 선택하면 공급자는 선택한 항목 텍스트를 텍스트 입력 필드에 삽입하는 것 외에도 클라이언트의 ITipAutocompleteClient::UserSelection 메서드 를 호출해야 합니다. 입력 패널은 이 알림을 사용하여 입력 패널에서 아직 삽입되지 않은 나머지 텍스트를 모두 삭제합니다.

마지막으로 공급자가 더 이상 필요하지 않은 경우 공급자를 자동 완성 클라이언트의 ITipAutocompleteClient::UnadviseProvider 메서드 를 호출하여 공급자의 연결을 해제해야 합니다. 공급자가 연결된 텍스트 입력 필드가 삭제되었거나 애플리케이션이 텍스트 입력 필드당 하나 대신 하나의 자동 완성 클라이언트만 만들기로 선택했기 때문에 공급자를 등록 취소해야 할 수 있습니다. 이 instance 포커스가 텍스트 필드에서 전환될 때마다 공급자를 등록 취소해야 합니다.

결론

입력판 자동 완성 통합은 태블릿 PC의 자동 완성 목록을 포함하는 Windows 애플리케이션의 사용자 환경을 개선하기 위한 강력한 도구입니다. 통합이 없으면 입력 패널 사용자는 자동 완성을 사용하기 위해 한 번에 한 문자씩 텍스트를 삽입하고 입력 패널의 위치를 변경하는 지루한 프로세스를 거쳐야 합니다. 통합을 사용하면 입력 패널에서 사용자 잉크로 자동 완성 목록이 편리한 위치에 표시되어 텍스트 입력 속도와 용이성을 모두 향상합니다. 셸 자동 완성 또는 .NET Framework 3.0 자동 완성을 기반으로 구축된 자동 완성 기능이 포함된 애플리케이션에서 입력 패널 자동 완성 통합은 무료이며 매력적인 기능입니다. 또한 사용자 지정 자동 완성 컨트롤을 사용하도록 선택하는 애플리케이션에 대해 동일한 통합 환경을 사용하도록 간단한 COM 기반 인터페이스 집합이 제공됩니다.

텍스트 입력 패널 참조