Page 1 of 1

Цветной текст в контролах

Posted: Fri Jan 18, 2013 5:19 pm
by Tapok
Задача: контрол похожий на wxTreeCtrl либо wxListBox с возможностью форматированого текста (разного цвета).
Пример:
wxTreeCtrl.png
wxTreeCtrl.png (2.15 KiB) Viewed 8432 times
wxListBox.png
wxListBox.png (1.91 KiB) Viewed 8432 times
Вопрос: можно "скрестить" уже существующие контролы (wxRichText и wxListBox) или прийдется дописывать wxRichText?
Интересуют готовые решения либо советы по поводу улучшения wxRichText (его альтернативы если есть) т.к. если верить этому http://docs.wxwidgets.org/trunk/classwx ... _graph.png то перед текстБоксом есть множество его родителей и, что то мне подсказывает, что финальный wxTextBox мне не нужен, а нужно "допиливать" одного из его родителей.

*мысли в слух* может не стоит с этим парится и написать с нуля контрол, используя контекст устройства?

Re: Цветной текст в контролах

Posted: Sat Jan 19, 2013 1:18 am
by T-Rex
По листбоксу - можно wxSimpleHtmlListBox.
По три конролу - вряд ли. Там только цвет для итема целиком. Разве что нативным способом для каждой платформы.
Как-то делали кастомный три контрол где поверх каждого итема рисовался кастомный контрол. Это криво, конечно, но если сильно хочется, можно owner-drawn какой-то статик текст придумать и его поверх итемов показвать.

Re: Цветной текст в контролах

Posted: Sat Jan 19, 2013 9:06 am
by Tapok
Спасибо за подсказку. Решил использовать wxHtmlListBox т.к. написанно, что wxSimpleHtmlListBox медленный, а мне нужно отображать большие объемы данных.
Т.к. "This is still an abstract base class and you will need to derive your own class from it" попытался создать класс наследник от wxHtmlListBox, также сказано "you will only need to override a single wxHtmlListBox::OnGetItem function"

Сам класс:

Code: Select all

class myHtmlListBox: public wxHtmlListBox
{
    virtual wxString myHtmlListBox::OnGetItem(size_t n)const
    {
        return _T("lalala");
    }
};
Переменные в классе главной формы:

Code: Select all

myHtmlListBox* HtmlListBox1;
        static const long ID_HTMLLISTBOX1;
"Заполнение" переменных:

Code: Select all

const long AkeyFrame::ID_HTMLLISTBOX1 = wxNewId();
Создание контрола, строчка лежит в конструкторе главной формы.

Code: Select all

HtmlListBox1->Create(this, ID_HTMLLISTBOX1, wxDefaultPosition, wxDefaultSize, 0, _T("ID_HTMLLISTBOX1"));
Все компилируется, но программа падает в рантайме с ошибкой "Process terminated with status -1073741819 (0 minutes, 1 seconds)"

ЗЫ существена ли разница в скорости wxHtmlListBox и wxSimpleHtmlListBox?

Re: Цветной текст в контролах

Posted: Sat Jan 19, 2013 11:22 am
by T-Rex
Существенна. Виртуальный режим у обычного быстрее ж. В примерах вроде есть, можно там посмотреть и разобраться почему валится