То, что вы хотите сделать, не совсем возможно. В scintilla/wxStyledTextCtrl выбор всегда выполняется от где-то до текущей позиции каретки. Вы пытаетесь сделать выбор, который начинается до текущей позиции и заканчивается после него, и этого просто не может быть сделано.
Также это поведение по умолчанию, когда вы дважды щелкаете по слову, за исключением того, что двойной щелчок перемещает каретку до конца слова. Вам действительно нужно сделать это одним щелчком мыши? Если вы действительно этого хотите, вы можете использовать несколько вариантов, чтобы придать внешний вид. В основном у вас будет один выбор, который начинается от начала слова до текущей позиции, и второй выбор из текущей позиции до конца.
Поместите эти команды где-нибудь, которые вызываются перед обработчиком мыши (возможно, в конструкторе), а также объявляют метод с этим прототипом «void SelectCurWord();»
SetSelBackground(true, wxColour(192,192,192));
SetSelForeground(true, wxColour(0,0,0));
SetAdditionalSelBackground(wxColor(192,192,192));
SetAdditionalSelForeground(wxColour(0,0,0));
SetAdditionalCaretsVisible(false);
Вы можете изменить цвета на все, что захотите, но убедитесь, что в основном и дополнительном выборе используются одни и те же цвета. Обработчик мыши должен сделать что-то вроде этого.
void Script::OnLeftUp(wxMouseEvent& event)
{
CallAfter(&Script::SelectCurWord);
event.Skip();
}
Причина, почему мы должны использовать CallAfter, чтобы позволить обработку событий завершить свою работу, прежде чем пытаться добавить выбор. Метод SelectCurWord в основном то, что вы были раньше, но использует множественный выбор вместо:
void Script::SelectCurWord()
{
int currentPos = GetCurrentPos();
int wordStartPos = WordStartPosition(currentPos, true);
int wordEndPos=WordEndPosition(wordStartPos, true);
AddSelection(wordStartPos,currentPos);
AddSelection(currentPos,wordEndPos);
}
вы действуете является «OnLeftUp()», но вы говорите о правой кнопке мыши. Который из них? – Igor
Я не говорю о правой кнопке, извините за непонимание. – macroland
Вы пробовали образец stc? Попытайтесь включить решение эхуморо, если простой образец не работает должным образом. – Igor