あなたがやりたいことは、正確には不可能です。scintilla/wxStyledTextCtrl では、選択は常にどこかから現在のキャレット位置まで実行されます。現在の位置の前から始まり、その後で終わる選択をしようとしていますが、それはできません。
また、これは基本的に単語をダブルクリックしたときのデフォルトの動作ですが、ダブルクリックするとキャレットが単語の末尾に移動します。ワンクリックでこれを行う必要がありますか? ただし、本当に必要な場合は、複数の選択を使用してこの外観を与えることができます。基本的に、単語の先頭から現在の位置までの 1 つの選択と、現在の位置から最後までの 2 つ目の選択があります。
これらのコマンドをマウス ハンドラーの前に呼び出される場所 (おそらくコンストラクター内) に配置し、このプロトタイプ "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);
}