В связи с загрузкой на работе долго ничего не делал, сейчас понемногу наверстываю( в основном рутинные вещи реализую ), на данный момент в общем виде сделал обработку событий, ничего нового не придумал как сдереть идею MFC и wxWidgets:
PHP код:
BEGIN_EVENT_TABLE( ThemedButton )
EVT_PAINT( ThemedButton::OnPaint )
END_EVENT_TABLE
...
/**********************************************************************************************/
void ThemedButton::OnPaint( Event& event )
{
PaintDC dc( this );
dc.SetBrush( RED );
...
также можно написать:
PHP код:
button->Connect( LT_EVENT_PAINT, EventHandler( ThemedButton::OnPaint ) );
для отправки событий есть глобальные функции:
PHP код:
PostEvent( button, LT_EVENT_PAINT );
PostEvent( button, LT_EVENT_KEY_DOWN, event ); // тут мы должны сами инициализировать переменную event, чтоб передать необходимые данные в обработчик
хотелось бы услышать пожелания по поводу как было бы удобнее организовать обработку событий, да и вообще какие есть варианты
Lester добавил 27.02.2009 в 17:29
Думаю вот реализовать такую фичу, чтоб можно было любому виджету сказать:
dialog->Save() - и он запомнил все свои параметры + параметры всех дочерних виджетов в конфиг приложения, а по dialog->Load() - загружал, т.е. например значения текстовых полей, чекбоксов, скроллов и т.п., ну и ес-но предусмотреть сохранение/загрузку в разные форматы/места, вобщем что-то вроде сериализации
Lester добавил 28.02.2009 в 09:15
Пока делаю виджеты с поддержкой тем, раньше было просто:
PHP код:
button->SetThemeBitmap( BITMAP_BUTTON_PRESSED, Bitmap( "pressed.png" ), 3, 3, 3, 3 ); // 3, 3, 3, 3 - границы по бокам, которые не будут растягиваться
теперь есть Style - набор стилей для всех виджетов, можно получить по имени, сохранить/загрузить в файл и т.п.
Он уже хранит в себе ButtonStyle, CheckButtonStyle etc., каждый из которых также может быть сохранен/загружен
Тут уже сложнее - в каждом стиле для отдельного виджета есть разные элементы, есть два варианта для их отрисовки - текстуры и метафайлы( последовательность шагов - нарисуй линию, нарисуй точку и т.п. ), второе будет быстрее работать, меньше занимать места и следовательно лучше подойдет для слабого железа( например моей n810 ). Когда будет время сделаю редактор стилей.
Каждый виджет с поддержкой стилей по умолчанию использует текущий глобальный стиль, который можно переключать, но ему можно "сказать" использовать другой Style( а также ButtonStyle и т.п. )
Lester добавил 28.02.2009 в 09:35
Пару слов про реализацию Metafile в моем тулките
MetafileDC - такой же DC( DC - то же что и канва ) как и для рисования на экране, в принтер, в ПДФ и т.д., после рисования на нем можно получить Metafile
Metafile - набор операций для рисования, что-то вроде своего формата навроде SVG( кстати добавил поддержку SVG в тулкит - теперь его можно нарисовать на DC )
MetafilePlayer - берет Metafile и рисует на любом DC, т.е. написав функцию, которая нарисует, например, график, мы берем полученный Metafile и отдав его MetafilePlayer + указав DC ( куда хотим сохранить - PDF, Postscript, Latex, ODT, PNG, SVG, HTML и т.д. - в том числе можно просто отрисовать на экране, применяя любой масштаб ) получаем экспорт в нужный формат без всякого усилия со своей стороны