다음을 통해 공유


창 없는 서식 있는 편집 컨트롤

텍스트 서비스 개체라고도 하는 창 없는 서식 있는 편집 컨트롤은 창을 제공하지 않고 서식 있는 편집 컨트롤의 기능을 제공하는 개체입니다. 메시지를 수신할 수 있는 기능 및 메시지를 그릴 수 있는 디바이스 컨텍스트와 같은 창의 기능을 제공하기 위해 창 없는 서식 있는 편집 컨트롤은 ITextServicesITextHost 인터페이스 쌍을 사용합니다.

창 없는 서식 있는 편집 컨트롤을 만들려면 ITextHost 인터페이스의 구현에 대한 포인터를 사용하여 CreateTextServices 함수를 호출합니다. CreateTextServices는 창 없는 컨트롤의 ITextServices 구현에 대한 포인터를 검색하기 위해 쿼리할 수 있는 IUnknown 포인터를 반환합니다.

Msftedit.dll은 ITextServices 인터페이스에 대한 IUnknown 포인터를 쿼리하는 데 사용할 수 있는 IID_ITextServices라는 IID(인터페이스 식별자)를 내보냅니다. 다음 예제에서는 IID_ITextServices를 검색하고 이를 사용하여 ITextServices 인터페이스를 가져오는 방법을 보여 줍니다.

    .
    .
    .
    HRESULT hr;
    IUnknown* pUnk = NULL;
    ITextServices* pTextServices =  NULL;
    
    // Create an instance of the application-defined object that implements the 
    // ITextHost interface.
    TextHost* pTextHost = new TextHost();
    if (pTextHost == NULL) 
        goto errorHandler;

    // Create an instance of the text services object.
    hr = CreateTextServices(NULL, pTextHost, &pUnk);
    if (FAILED(hr))
        goto errorHandler;
        
    // Retrieve the IID_ITextServices interface identifier from 
    // Msftedit.dll. The hmodRichEdit parameter is a handle to the 
    // Msftedit.dll module retrieved by a previous call to the 
    // GetModuleHandle function.
    IID* pIID_ITS = (IID*) (VOID*) GetProcAddress(hmodRichEdit, 
        "IID_ITextServices");
               
    // Retrieve the ITextServices interface.    
    hr = pUnk->QueryInterface(*pIID_ITS, (void **)&pTextServices);
    if (FAILED(hr))
        goto errorHandler;
     .
     . 
     .   
     

Msftedit.dll은 ITextHost 인터페이스를 쿼리하는 데 비슷한 방식으로 사용할 수 있는 IID_ITextHost라는 IID(인터페이스 식별자)도 내보냅니다.

ITextHost 인터페이스에는 창 없는 컨트롤이 창에 대한 정보를 검색하기 위해 호출하는 메서드가 있습니다. 예를 들어 텍스트 서비스 개체는 TxGetDC 메서드를 호출하여 그릴 수 있는 디바이스 컨텍스트를 검색합니다. 창 없는 컨트롤은 TxNotify 메서드를 호출하여 서식 있는 편집 알림 메시지와 같은 알림을 텍스트 호스트에 보냅니다. 텍스트 서비스 개체는 다른 ITextHost 메서드를 호출하여 텍스트 호스트에 다른 창 관련 서비스를 수행하도록 요청합니다. 예를 들어 TxInvalidateRect 메서드는 텍스트 호스트에 창의 업데이트 영역에 사각형을 추가하도록 요청합니다.

표준 서식 있는 편집 컨트롤에는 애플리케이션의 시스템 메시지 및 메시지를 처리하는 창 프로시저가 있습니다. 컨트롤의 창 핸들을 사용하여 텍스트 편집 및 기타 작업을 수행하기 위한 메시지를 보낼 수 있습니다. 그러나 창 없는 서식 있는 편집 컨트롤에는 메시지를 수신하고 처리하는 창 프로시저가 없습니다. 대신 ITextServices 인터페이스가 제공됩니다. 창 없는 서식 있는 편집 컨트롤에 메시지를 보내려면 TxSendMessage 메서드를 호출합니다. 이 메서드를 사용하여 서식 있는 편집 메시지를 보내거나 마우스 또는 키보드 입력에 대한 시스템 메시지와 같이 컨트롤에 영향을 미치는 다른 메시지를 전달할 수 있습니다.

COM 집계 개체의 일부로 텍스트 서비스 개체를 만들 수도 있습니다. 그러면 창 없는 COM(구성 요소 개체 모델) 개체를 사용하여 텍스트 서비스 개체를 쉽게 집계할 수 있습니다.