창 없는 서식 있는 편집 컨트롤
텍스트 서비스 개체라고도 하는 창 없는 서식 있는 편집 컨트롤은 창을 제공하지 않고 서식 있는 편집 컨트롤의 기능을 제공하는 개체입니다. 메시지를 수신할 수 있는 기능 및 메시지를 그릴 수 있는 디바이스 컨텍스트와 같은 창의 기능을 제공하기 위해 창 없는 서식 있는 편집 컨트롤은 ITextServices 및 ITextHost 인터페이스 쌍을 사용합니다.
창 없는 서식 있는 편집 컨트롤을 만들려면 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(구성 요소 개체 모델) 개체를 사용하여 텍스트 서비스 개체를 쉽게 집계할 수 있습니다.