텍스트 저장소
ACP(애플리케이션 문자 위치)
ACP는 텍스트 스트림의 시작부터 문자 수로 표현되는 텍스트 스트림의 문자 또는 문자 위치입니다. ACP 모델은 0부터 시작하므로 텍스트 스트림의 첫 번째 문자에는 ACP가 0입니다. 예:
Text Stream H | e | l | l | o | | W | o | r | l | d
ACP 0 1 2 3 4 5 6 7 8 9 10
텍스트 저장소는 텍스트 스트림을 ACP로 표현할 수 있도록 하는 ITextStoreACP 인터페이스를 지원하는 개체를 구현합니다. ITextStoreACP 인터페이스 메서드는 텍스트 스트림의 ACP 범위를 사용하여 텍스트를 수정합니다.
Anchor-Based 애플리케이션
관리자는 기본적으로 ACP 기반 메서드를 사용하여 텍스트를 조작합니다. 그러나 앵커 기반 접근 방식은 앵커를 지원하는 Microsoft Active Accessibility 클라이언트에서 사용할 수 있습니다. 여기서 관리자는 ITextStoreAnchor 및 ITextStoreAnchorSink 메서드를 사용하여 ITextStoreACP 및 ITextStoreACPSink 메서드를 래핑합니다.
문서 Access Control
텍스트 저장소는 문서 잠금을 사용하여 텍스트 스트림에 대한 액세스를 제어합니다. 텍스트 저장소를 읽거나 수정하려면 먼저 ITextStoreACP::AdviseSink 메서드를 호출하고 조언 싱크에 포인터를 전달하여 ITextStoreACPSink 인터페이스를 지원하는 advise 싱크를 설치해야 합니다. advise 싱크를 사용하면 관리자가 텍스트 저장소에서 문서 잠금을 가져오고 애플리케이션을 통한 사용자 입력과 같이 관리자가 아닌 다른 항목에 의해 텍스트 저장소가 수정될 때 알림을 받을 수 있습니다. 조언 싱크는 이 항목의 뒷부분에서 설명합니다.
텍스트 저장소를 초기화하는 방법
애플리케이션은 다음 단계를 완료하여 텍스트 저장소를 초기화합니다.
스레드 관리자 개체에 대한 포인터를 사용하여 CoCreateInstance 함수를 호출하여 ITfThreadMgr 인터페이스를 기반으로 스레드 관리자 개체를 만듭니다. 다음은 스레드 관리자 개체를 구현하는 코드 예제입니다.
hr = CoCreateInstance (CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, IID_ITfThreadMgr, (void**)&pThreadMgr);
ITfThreadMgr::Activate 메서드를 호출하여 스레드 관리자 개체를 활성화합니다. 이 메서드는 컨텍스트 개체를 만드는 데 사용되는 클라이언트 식별자에 대한 포인터를 제공합니다. 스레드 관리자는 문서 관리자 개체를 구현하는 데 사용됩니다.
문서 관리자 개체에 대한 포인터를 사용하여 ITfThreadMgr::CreateDocumentMgr 메서드를 호출하여 ITfDocumentMgr 인터페이스를 기반으로 문서 관리자 개체를 만듭니다. 문서 관리자 개체는 텍스트 저장소인 컨텍스트 개체를 구현하는 데 사용됩니다.
텍스트 저장소 개체에 대한 포인터와 스레드 관리자를 활성화하지 않는 클라이언트 식별자에 대한 포인터를 사용하여 ITfDocumentMgr::CreateContext 메서드를 호출하여 문서 관리자에서 컨텍스트 개체를 만듭니다. 다음은 컨텍스트 개체를 만드는 예제입니다.
hr = pDocumentMgr->CreateContext(m_ClientID, 0, (ITextStoreACP*)this, &pContext, pEditCookie);
ITfDocumentMgr::P ush 메서드를 사용하여 컨텍스트 개체를 스택에 푸시합니다. 다음은 컨텍스트 개체를 스택에 푸시하는 예제입니다.
hr = pDocumentMgr->Push(pContext);
텍스트 저장소를 수정하는 방법
ITfDocumentMgr::P ush 메서드는 조언 싱크 인터페이스에 대한 포인터를 사용하여 ITextStoreACP::AdviseSink를 호출하여 새 advise 싱크를 설치하거나 기존 조언 싱크를 수정합니다. 애플리케이션에 대한 사용자 입력과 같이 관리자가 아닌 다른 항목에 의해 텍스트 저장소가 수정되면 advise 싱크가 알림을 받습니다. 애플리케이션은 입력 메서드가 포커스를 가져올 때 ITfThreadMgrEventSink::OnSetFocus 메서드를 호출해야 합니다. 스레드 관리자에 대한 다른 알림은 적절한 ITextStoreACPSink 인터페이스 메서드를 호출하여 제공됩니다.
그러나 애플리케이션은 ITextStoreACP 인터페이스 메서드에 대한 응답으로 ITextStoreACPSink 인터페이스 메서드를 호출해서는 안 됩니다. 애플리케이션은 텍스트 저장소가 관리자가 아닌 다른 항목에 의해 수정될 때만 ITextStoreACPSink 인터페이스 메서드를 호출해야 합니다.
텍스트 저장소의 내용은 컴퍼지션이라는 임시 입력 상태로 수정할 수 있습니다.
관련 항목