Как получить выделение с помощью Text - RichEditBox C++

Хорошо, я знаю, как сделать выделение с минимально-максимальной позицией символа, но если вы добавите текст, вам придется заново найти текст и обновить выделение. Поэтому я искал и обнаружил, что вы можете использовать FindTextEx для ввода слова, мин / макс поисковой позиции, и он будет возвращать мин / макс этого слова.

Но это всегда дает мне сбой, и я не знаю почему, также MSDN говорит, что для обратного поиска нужно использовать FR_DOWN, но когда я набираю его как атрибут (WPARAM), он говорит, что он не определен (как 50% других FR_, перечисленных на странице FindTextEx).)

Включен RichEdit.h (это просто функция, потому что моя программа в настоящее время слишком велика для размещения всего исходного кода)

 void UpdateLog() {

    CHARFORMAT CharFormat;
    CharFormat.cbSize = sizeof(CHARFORMAT);
    CharFormat.dwMask = CFM_BOLD | CFM_EFFECTS;
    CharFormat.dwEffects = CFE_BOLD | CFE_AUTOCOLOR;

    std::wstring szUpdatesString;

    szUpdatesString += L"SQL Manager V1.3 - Trevin Corkery\r\n\r\n";
    szUpdatesString += L"New:\r\nAdded \"Information\" Tab\r\n\r\n";
    szUpdatesString += L"Improvements:\r\n\r\n";
    szUpdatesString += L"Fixes:\r\nTabs now work correctly.\r\n";
    SetWindowText(hUpdatesRE, szUpdatesString.c_str());
    CHARRANGE CharRange = { 0 };
    FINDTEXTEX FindTextExtended;

    FindTextExtended.chrg.cpMin = 0;
    FindTextExtended.chrg.cpMax = -1;
    FindTextExtended.lpstrText = L"New";


    SendMessage(hUpdatesRE, EM_FINDTEXTEX, FR_NOT_ENUM, (LPARAM)&FindTextExtended);
    SendMessage(hUpdatesRE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&CharFormat);

}

1 ответ

Ну, я обнаружил проблему, у меня был неправильный атрибут для WPARAM. Требуется FR_DOWN, но, поскольку по какой-то странной причине FR_DOWN не был определен, я посмотрел код FR_DOWN и обнаружил, что это 0x00000001.

Теперь это работает,

SendMessage(hUpdatesRE, EM_FINDTEXT, (WPARAM)0x00000001, (LPARAM)&FindTextExtended)
Другие вопросы по тегам