Поделиться через


Использование операций с форматированными изменениями текста

Приложение может отправлять сообщения для получения или поиска текста в элементе управления расширенными возможностями редактирования. Вы можете получить выбранный текст или указанный диапазон текста.

Чтобы получить выделенный текст в элементе управления расширенными изменениями, используйте сообщение EM_GETSELTEXT . Текст копируется в указанный массив символов. Необходимо убедиться, что массив достаточно велик, чтобы сохранить выделенный текст, а также завершающий символ NULL.

Чтобы получить указанный диапазон текста, используйте сообщение EM_GETTEXTRANGE . Структура TEXTRANGE , используемая с этим сообщением, указывает диапазон текста для извлечения и указания на массив символов, получающий текст. В этом случае приложение должно убедиться, что массив достаточно велик для указанного текста, а также завершающего символа NULL.

Вы можете искать строку в элементе управления расширенными изменениями с помощью EM_FINDTEXT или EM_FINDTEXTEX сообщений или их эквивалентов Юникода, EM_FINDTEXTW и EM_FINDTEXTEXW. Структура FINDTEXT , используемая с нерастендированными версиями, указывает текстовый диапазон для поиска и строки для поиска. Расширенные версии используют структуру FINDTEXTEX , которая задает те же сведения, а также получает начальные и конечные точки диапазона символов найденного текста. Можно также указать такие параметры, как учет регистра поиска.

Это важно знать

Технологии

Необходимые компоненты

  • C/C++
  • Программирование пользовательского интерфейса Windows

Instructions

Использование операции "Форматированный текст"

В следующем примере функция находит указанный текст в выделенном тексте в элементе управления расширенными изменениями, поддерживающем Юникод. Если целевой объект найден, он становится новым выбором.

BOOL FindTextInSelection(HWND hRich, WCHAR* target)
{
    CHARRANGE selectionRange;
    
    SendMessage(hRich, EM_EXGETSEL, 0, (LPARAM)&selectionRange);
    
    FINDTEXTEX ftex;
    
    ftex.lpstrText  = target;
    ftex.chrg.cpMin = selectionRange.cpMin;
    ftex.chrg.cpMax = selectionRange.cpMax;
    
    LRESULT lr = SendMessage(hRich, EM_FINDTEXTEXW, (WPARAM)FR_DOWN, (LPARAM) &ftex);
    
    if (lr >= 0)
    {
        LRESULT lr1 = SendMessage(hRich, EM_EXSETSEL, 0, (LPARAM)&ftex.chrgText);
        
        SendMessage(hRich, EM_HIDESELECTION, (LPARAM)FALSE, 0);
        
        return TRUE;
    }
    
    return FALSE;
    
}

Замечания

Microsoft Rich Edit 3.0 также поддерживает функцию редактора методов ввода HexToUnicode (IME), которая позволяет пользователю преобразовывать между шестнадцатеричными и Юникодами с помощью горячих ключей. Дополнительные сведения см. в разделе HexToUnicode IME.

Использование элементов управления расширенными изменениями

Демонстрация общих элементов управления Windows (CppWindowsCommonControls)