Заинтересовался этим "багом"
Собрал тестовое приложение и как я и предполагал, бага нет (по крайней мере на Xubuntu 20.04)
Code: Select all
#include <wx/app.h>
#include <wx/frame.h>
#include <wx/button.h>
#include <wx/stc/stc.h>
#define wxID_BUTTON_1 1000
class MyFrame : public wxFrame
{
wxButton *m_button1;
wxStyledTextCtrl *m_styledTextCtrl;
wxString m_stVal;
public:
MyFrame(wxWindow *parent, int id = wxID_ANY, wxString title = wxT("wxStyledTextCtrl Bug"), wxPoint pos = wxPoint(200,200), wxSize siz = wxSize(600,400) ) : wxFrame(parent, id, title, pos, siz)
{
m_button1 = new wxButton( this, wxID_BUTTON_1, wxT("Button1"), wxPoint(10,10), wxSize(80,35), 0 );
this->Bind( wxEVT_BUTTON, &MyFrame::OnButton1Click, this, wxID_BUTTON_1 );
m_stVal = "Hello Big world!"; //Текст в wxStyledTextCtrl в котором будем искать нужное слово
m_styledTextCtrl = new wxStyledTextCtrl( this, wxID_ANY, wxPoint(0,60), wxSize(580,300), 0, wxEmptyString );
m_styledTextCtrl->SetCodePage(wxSTC_CP_UTF8); //Устанавливаем кодировку Юникод (UTF-8)
m_styledTextCtrl->SetValue(m_stVal);
}
virtual void OnButton1Click( wxCommandEvent& event )
{
wxString findText = "big "; //Искомое слово, которое нужно найти в wxStyledTextCtrl
int docLength = m_styledTextCtrl->GetTextLength(); //Длина всего документа загруженного в wxStyledTextCtrl
int to;
int valPos = m_styledTextCtrl->FindText(0, docLength, findText, wxSTC_FIND_MATCHCASE, &to); //wxSTC_FIND_WHOLEWORD wxSTC_FIND_MATCHCASE
m_styledTextCtrl->Remove(valPos, to); //Удаляем если слово в wxStyledTextCtrl нашлось.
}
~MyFrame(){}
};
class MyApp : public wxApp
{
wxLocale m_local;
public:
virtual bool OnInit()
{
m_local.Init(wxLANGUAGE_RUSSIAN);
MyFrame* frame = new MyFrame(0L);
frame->Show(true);
return true;
}
};
wxIMPLEMENT_APP(MyApp);
FindText работает одинаково и для латиницы и для кирилицы.
Менял флаг wxSTC_FIND_WHOLEWORD и wxSTC_FIND_MATCHCASE всё работает,
искомое слово на латинице находится только если регистр полностью совпадает по регистру,
если не совпадает, то слово не находится.