Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Элемент управления расширенными возможностями редактирования, также известный как объект текстовых служб, представляет собой объект, предоставляющий функциональные возможности элемента управления расширенных правок без предоставления окна. Для предоставления функциональности окна, таких как возможность получать сообщения и контекст устройства, в который может осуществляться отрисовка, безоконные расширенные элементы управления редактированием используют пару интерфейсов: ITextServices и ITextHost.
Чтобы создать полнофункциональный элемент управления без окна, вызовите функцию CreateTextServices с указателем на вашу реализацию интерфейса ITextHost. CreateTextServices возвращает указатель IUnknown, который можно запросить для получения указателя на ITextServices реализации элемента управления без окна.
Msftedit.dll экспортирует идентификатор интерфейса (IID) с именем IID_ITextServices, который можно использовать для запроса указателя IUnknown для интерфейса ITextServices. В следующем примере показано, как получить 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 также экспортирует идентификатор интерфейса (IID) с именем IID_ITextHost, который можно использовать аналогичным образом для запроса интерфейса ITextHost.
Интерфейс ITextHost содержит методы, которые безоконный элемент управления вызывает для получения сведений о вашем окне. Например, объект текстовых служб вызывает метод TxGetDC, чтобы получить контекст устройства, в который можно рисовать. Элемент управления без окна вызывает метод TxNotify для отправки уведомлений, таких как уведомления о продвинутом редактировании, в текстовый хост. Объект служб текста вызывает другие методы ITextHost, чтобы запросить текстовый хост выполнить другие услуги, связанные с окном. Например, метод TxInvalidateRect запрашивает текстовый хост для того, чтобы добавить прямоугольник в область обновления окна.
Стандартный элемент управления расширенными возможностями редактирования содержит процедуру окна, которая обрабатывает системные сообщения и сообщения из приложения. Вы можете использовать дескриптор окна элемента управления, чтобы отправлять сообщения для редактирования текста и выполнения других операций. Элемент управления расширенным редактированием без окна не имеет процедуры окна для получения и обработки сообщений. Вместо этого он предоставляет интерфейс ITextServices. Чтобы отправить сообщения в элемент управления Rich Edit без окна, вызовите метод TxSendMessage. Этот метод можно использовать для отправки любого из сообщений с широкими возможностями редактирования или передачи других сообщений, влияющих на элемент управления, таких как системные сообщения для ввода мыши или клавиатуры.
Вы также можете создать объект текстовых служб в составе объекта, агрегированного COM, . Это позволяет легко агрегировать объект текстовых служб с безоконным объектом Компонентной объектной модели (COM).