GdkEventExpose expose;
expose.area.width = SCREEN_SIZE_X;
expose.area.height = SCREEN_SIZE_Y;
expose.area.x = expose.area.y = [/SIZE][SIZE=2][COLOR=#800000]0[/COLOR][/SIZE][SIZE=2];
expose_event_func(drawing_area, &expose);
Использование GTK
Использую GTK+-2.0. Необходимо в окошке показать рисунок. В разных частях этого рисунка должны отображаться изменяющиеся во времени числа. Подскажите как это сделать. Заранее спасибо ответившим.
[SIZE=2][COLOR=#0000ff]static[/COLOR][/SIZE][SIZE=2] gint expose_event(GtkWidget* widget, GdkEventExpose* event)
{
GdkGC *gc;
GdkColormap *palet;
GdkBitmap* mask;
[/SIZE][SIZE=2][COLOR=#008000]
[/COLOR][/SIZE][SIZE=2]gc = gdk_gc_new( widget->window );
[/SIZE]
[SIZE=2][COLOR=#0000ff]static[/COLOR][/SIZE][SIZE=2] GdkPixmap* pixmap = gdk_pixmap_new(NULL, [/SIZE][SIZE=2][COLOR=#800000]640[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#800000]480[/COLOR][/SIZE][SIZE=2], [/SIZE][SIZE=2][COLOR=#800000]24[/COLOR][/SIZE][SIZE=2]);
[SIZE=2]pixmap = gdk_pixmap_create_from_xpm(NULL,
NULL,
NULL, [/SIZE][SIZE=2][COLOR=#000080]"картинка.xpm"[/COLOR][/SIZE][SIZE=2]);
[/SIZE]
gdk_draw_pixmap( widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE( widget )],
pixmap,
event->area.x, event->area.y,
event->area.x, event->area.y,
event->area.width, event->area.height );
GdkFont* font = gdk_font_load( [/SIZE][SIZE=2][COLOR=#000080]"-*-courier new-bold-r-*-*-*-160-*-*-*-*-*-*"[/COLOR][/SIZE][SIZE=2] );
[/SIZE][SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2]( font )
{
gdk_draw_string( widget->window, font, gc,
[/SIZE][SIZE=2][COLOR=#800000]50[/COLOR][/SIZE][SIZE=2],
[/SIZE][SIZE=2][COLOR=#800000]50[/COLOR][/SIZE][SIZE=2],
[/SIZE][SIZE=2][COLOR=#000080]"tra-ta-ta"[/COLOR][/SIZE][SIZE=2] );
}
[/SIZE][SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2]( FALSE );
}
Это функция отрисовки содержимого виджета, с остальным справишся?
[/SIZE]
Огромное спасибо Matush. Как я понял, мне надо создать новый виджет (не пинай ногами начинающего)?
Да я сам пару дней как GTK использую.
Разобрался более или менее с предложенным кодом. Возник следующий вопрос - для того чтобы менять значения отображаемых чисел я сам должен создавать сигнал вызывающий ф-цию expose_event? Если это так, то как это сделать?
Можно и так. Незнаю на сколько это правильно.
[SIZE=2]Я не создавал сигнал, а запускал функцию перерисовки, примерно так:
Код:
[/SIZE]
void gdk_window_invalidate_rect (GdkWindow *window,
GdkRectangle *rect,
gboolean invalidate_children);
Matush, не сочти за наглость, не могу найти в доке описание функции
expose_event_func(drawing_area, &expose);
можешь дать ссылочку (на доку)?
expose_event_func(drawing_area, &expose);
можешь дать ссылочку (на доку)?[/quote]
могу :)))))))))))))
expose_event_func - это я так назвал для примера, "expose_event_func" - это та функия которую ты вешаешь в качестве обработчика события "expose_event". Ее можно было назвать как угодно, "tra_la_la_expose" например.
Код:
[SIZE=2]gtk_signal_connect(GTK_OBJECT(drawing_area), [/SIZE][SIZE=2][COLOR=#000080]"expose_event"[/COLOR][/SIZE][SIZE=2],
(GtkSignalFunc)expose_event_func, NULL);
[/SIZE]
(GtkSignalFunc)expose_event_func, NULL);
[/SIZE]
www.gtk.org
[/SIZE]