다음을 통해 공유


작곡

컴퍼지션은 텍스트 서비스가 애플리케이션과 사용자에게 입력 텍스트가 여전히 변경 상태임을 지정할 수 있도록 하는 임시 입력 상태입니다. 애플리케이션은 컴퍼지션에 대한 표시 특성 정보를 가져오고 이 정보를 사용하여 사용자에게 컴퍼지션 상태를 표시할 수 있고 가져와야 합니다.

컴퍼지션을 사용하는 한 가지 예는 음성 입력 중입니다. 사용자가 말하는 동안 음성 텍스트 서비스는 컴퍼지션을 만듭니다. 이 컴퍼지션은 전체 음성 입력이 완료될 때까지 그대로 유지됩니다. 세션이 종료되면 음성 텍스트 서비스가 컴퍼지션을 종료합니다.

애플리케이션은 컴퍼지션의 존재 및 부재를 사용하여 텍스트를 표시하는 방법과 텍스트에서 처리해야 하는 작업을 결정합니다. 예를 들어 사용자가 음성 엔진을 사용하여 텍스트를 입력하는 경우 애플리케이션은 컴퍼지션 텍스트에 대해 맞춤법 또는 문법 검사를 수행해서는 안 됩니다. 텍스트는 컴퍼지션이 종료될 때까지 불완전한 것으로 간주됩니다.

Text Services

텍스트 서비스는 ITfContextComposition::StartComposition을 호출하여 컴퍼지션을 만듭니다. 텍스트 서비스는 필요에 따라 컴퍼지션 이벤트 알림을 받는 ITfCompositionSink 개체를 구현할 수 있습니다. StartComposition은 텍스트 서비스에서 참조를 유지하고 컴퍼지션을 수정하고 종료하는 데 사용하는 ITfComposition 개체를 반환합니다. 텍스트 서비스는 ITfComposition::EndComposition을 호출하여 컴퍼지션을 종료합니다.

텍스트 서비스가 컴퍼지션을 만들려는 경우 애플리케이션이 표준 텍스트와 다르게 컴퍼지션의 일부인 텍스트를 표시할 수 있도록 디스플레이 특성도 지원해야 합니다. 자세한 내용은 표시 특성 제공을 참조하세요.

애플리케이션

애플리케이션은 ITfContextOwnerCompositionSink 싱크를 설치하여 컴퍼지션의 생성, 변경 및 종료를 모니터링할 수 있습니다. 컴퍼지션이 시작되면 ITfContextOwnerCompositionSink::OnStartComposition 이 호출됩니다. 마찬가지로 컴퍼지션이 변경되거나 종료되면 ITfContextOwnerCompositionSink::OnUpdateCompositionITfContextOwnerCompositionSink::OnEndComposition 이 각각 호출됩니다.

다음은 컴퍼지션을 사용하여 문서를 업데이트하는 일반적인 절차입니다.

  1. ITextStoreACP::InsertTextAtSelection 또는 ITextStoreAnchor::InsertTextAtSelection 은 일반적으로 컴퍼지션에 초기 텍스트를 삽입하는 데 사용됩니다.
  2. 컴퍼지션은 InsertTextAtSelection에서 반환된 텍스트 범위를 사용하여 ITfContextComposition::StartComposition에 대한 호출로 시작됩니다.
  3. 음성 또는 키보드 항목과 같은 새 입력을 받으면 애플리케이션은 ITextStoreACP::SetText 또는 ITextStoreAnchor::SetText를 사용하여 컴퍼지션을 업데이트합니다.
  4. 애플리케이션이 컴퍼지션을 종료할 때라고 판단하면 ITfComposition::EndComposition을 호출합니다.

애플리케이션은 컴퍼지션이 활성 상태일 때뿐만 아니라 텍스트 서비스에서 제공하는 표시 특성을 사용하여 항상 텍스트 표시를 수정해야 합니다. 자세한 내용은 디스플레이 특성 사용을 참조하세요.

필요한 경우 애플리케이션은 ITfContextOwnerCompositionServices::TerminateComposition을 호출하여 컴퍼지션을 종료할 수 있습니다.