winapi — Как получить выделение с помощью Text — RichEditBox Stack Overflow

Хорошо, я знаю, как сделать выделение с минимально-максимальной позицией символа, но если вы добавите текст, вам придется заново найти текст и обновить выделение. Поэтому я искал и обнаружил, что вы можете использовать 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);

}

-3

Решение

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

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

SendMessage(hUpdatesRE, EM_FINDTEXT, (WPARAM)0x00000001, (LPARAM)&FindTextExtended)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]