Я использую WxWidgets 3.0.2 в статическом юникода сборки на Windows, 10. Я использую wxStyledTextCtrl, который рядом 1-к-1 отображение Scintilla а.WxWidgets/wxStyledTextCtrl - Выделите все вхождения, когда дважды щелкнув
Я ищу функциональность, похожую на Notepad ++, где при двойном нажатии на что-то в редакторе все элементы этого элемента выделяются. Трудно найти хорошие примеры, которые действительно демонстрируют стиль. Я просмотрел документацию по wxWidgets, документацию Scintilla, источник Notepad ++ и источник кода :: Blocks (последние два используют Scintilla в качестве текстовых редакторов), но до сих пор им не повезло.
Я пробовал много разных вариантов следующего кода, и он никогда не работает правильно. Либо ничего не выделено, а весь документ выделен. Я знаю, что чего-то не хватает, но я не могу понять, что.
//textarea is a wxStyledTextCtrl*
textarea->StyleSetBackground(styleHightlightAllSelected, wxColor(80, 255, 80));
wxString selectedText = textarea->GetSelectedText();
int selSize = selectedText.size();
int selStart = textarea->GetSelectionStart();
int pos = 0;
int curr = 0;
int maxPos = textarea->GetLastPosition();
while(pos != -1){
pos = textarea->FindText(curr, maxPos, selectedText);
if(pos == selStart){ //skip the actual highlighted item
curr = pos + selSize;
} else if(pos != -1){
textarea->StartStyling(pos, 0x1F);
textarea->SetStyling(selSize, styleHightlightAllSelected);
curr = pos + selSize;
}
}
Поисковая часть цикла успешно находит выделенный текст; это просто, что стиль, похоже, не утихает.
Так мои вопросы, которые я не мог найти ответы на следующие:
styleHightlightAllSelected
являетсяint
набор 100. Когда я его в 0, то весь документ позеленел, когда дважды щелкнув. Я вижу, что стили 32-39 предопределены. Существуют ли другие типы, которые предопределены, но не документированы действительно. смысл, 100 нормально?- Должен ли я установить весь стиль вверх, или я могу просто задать цвет фона, как я делаю выше?
- Достаточно ли сделать
StartStyling()
иSetStyling()
, когда я нахожу появление и делаю с ним, или есть еще? StartStyling()
В wxWidgets есть аргумент маски, но аналог Scintilla этого не делает. Я не могу четко определить, что я должен установить. Кажется, что 31 (00011111
) сохранит 5 существующих битов стилизации/лексера? По сути, я не уверен, что установить это, если все, что я хочу сделать, это изменить цвет фона каждого события.- Моя программа будет регулярно обрабатывать файлы размером в десятки и более мегабайт, поэтому я должен просто выделять видимые видимости и настраивать при необходимости при прокрутке/прыжке? В настоящий момент он ищет и (не удается) установить стиль в каждом вхождении, и он занимает около секунды в файле размером 50 МБ. Я заметил, что в том же файле, загруженном в Notepad ++, это происходит мгновенно, поэтому я предполагаю, что он делает это на видимой основе?
Вы читаете раздел [Styling] (http://www.scintilla.org/ScintillaDoc.html#Styling) в документах Scintilla? Кажется, ответ на большинство ваших вопросов. – ekhumoro
Как я уже упоминал в своем вопросе, я это прочитал. Это не помогло, так как документация Scintilla - это не более чем длинная версия имени функции/сообщения большую часть времени. – sorinev