wxRichTextCtrl не освобождает память с помощью метода Delete ()

Я пишу приложение для ведения журнала, которое получает данные и печатает журнал в поле wxRichTextCtrl с цветными линиями. Сначала я сохраняю строки журнала в векторе структур, содержащих как текст, так и информацию о цвете, затем событие wxTimer () запускает функцию, которая читает содержимое вектора и добавляет его в окно расширенного текста.

Когда буфер форматированного текста достигает 250 строк, я удаляю самую старую строку, чтобы в окне журнала всегда отображалось максимальное количество 250 строк. Очевидно, однако, это не освобождает память. Рассматривая использование памяти моим исполняемым файлом в диспетчере задач, я вижу увеличение используемой памяти при каждой новой строке, даже если программа правильно удаляет самые старые строки. Это известная ошибка wxRichTextCtrl?

Вот выдержка из моего кода:

Объявления:

wxRichTextCtrl *lstEventList;
// A vector of structures, a nice way to create a multi-dimensional vector
struct MidiLogStruct { wxString Text; wxColour Color; };
vector<MidiLogStruct> MidiLog;

В функции регистрации:

// eventLog is a wxString object containing the text
// eventColor is a wxColour object defining the text color
const MidiLogStruct thisLog = {eventLog, eventColor};
MidiLog.push_back(thisLog);

В функции таймера заполняется поле дисплея:

// Show all data stored in buffer
for (unsigned int i=0; i < MidiLog.size(); ++i)
{
lstEventList->SetInsertionPointEnd();                           // Set cursor after the last character
lstEventList->Newline();                                        // Add a new CRLF
lstEventList->BeginTextColour(MidiLog[i].Color);                // Set text color
lstEventList->WriteText(MidiLog[i].Text);                       // Write text
lstEventList->ShowPosition(lstEventList->GetLastPosition());    // Make sure the last line is in view
}

// Clear buffer
MidiLog.clear();

// Delete all lines that exceed the max NUMOFMIDILOGLINES
if (lstEventList->GetNumberOfLines() > NUMOFMIDILOGLINES)
lstEventList->Delete(wxRichTextRange(0, lstEventList->XYToPosition(0, lstEventList->GetNumberOfLines() - NUMOFMIDILOGLINES)));

0

Решение

Задача ещё не решена.

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

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

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