| 
 | |
|  | 
| GTK+ Reference Manual | ||||
|---|---|---|---|---|
| Top | Description | Object Hierarchy | Implemented Interfaces | ||||
| GtkDrawingAreaGtkDrawingArea Виджет для настраиваемых элементов пользовательского интерфейса | 
#include <gtk/gtk.h>
            GtkDrawingArea;
GtkWidget*  gtk_drawing_area_new            (void);
void        gtk_drawing_area_size           (GtkDrawingArea *darea,
                                             gint width,
                                             gint height);
  GObject
   +----GInitiallyUnowned
         +----GtkObject
               +----GtkWidget
                     +----GtkDrawingArea
                           +----GtkCurveGtkDrawingArea реализует AtkImplementorIface.
GtkDrawingArea
используется для создания настраиваемых
элементов пользовательского интерфейса.
Это по существу пустой виджет; вы можете
отобразить widget->window. После
создания области для рисования, приложение
может подключать: 
Сигналы нажатия кнопок мышью, для
	реакции на действия пользователя.
	(Используйте gtk_widget_add_events()
	для включения событий на которые вы
	хотите реагировать.) 
	
Сигнал "realize" для любых необходимых действий, когда виджет проиллюстрирован на определённом экране. (Создаются ресурсы GDK в ответ на этот сигнал.)
Сигнал "configure_event" для получения конкретных действий когда виджет изменяет размер.
Сигнал "expose_event" для обработки перерисовки содержимого виджета.
Следующая часть кода демонстрирует использование области рисования для отображения круга в обычном цвете символов виджета. Помните, GDK автоматически очищает просматриваемую область до цвета фона перед ответом на событие экспонирования, а рисунок не явно прикреплён к области просмотра.
Пример 1. Простое использование GtkDrawingArea.
gboolean expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) { gdk_draw_arc (widget->window, widget->style->fg_gc[GTK_WIDGET_STATE (widget)], TRUE, 0, 0, widget->allocation.width, widget->allocation.height, 0, 64 * 360); return TRUE; } [...] GtkWidget *drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (drawing_area, 100, 100); g_signal_connect (G_OBJECT (drawing_area), "expose_event", G_CALLBACK (expose_event_callback), NULL);
Событие экспонирования обычно происходит,
когда область рисования в первый раз
появляется на экране, или когда она
закрыта другим окном а затем снова
открывается (exposed). Вы так же можете
принудительно добавить событие
экспонирования к "повреждённому
участку" области рисования окна; для
этого используйте gtk_widget_queue_draw_area()
и gdk_window_invalidate_rect()
являющиеся эквивалентными. Так вы
получите событие экспонирования для
несуществующего участка. 
Доступные подпрограммы для рисования
доступны на страницах GDK
Drawing Primitives. Смотрите также
gdk_pixbuf_render_to_drawable()
для рисования GdkPixbuf.
Для реакции на события мышки в области
рисования, вы должны включить их с
помощью gtk_widget_add_events().
Для реакции на события клавиатуры, вы
должны установить флаг GTK_CAN_FOCUS
в области рисования и вероятно должны
нарисовать некоторую индикацию видимую
пользователем которая находится в
фокусе области рисования. Используйте
GTK_HAS_FOCUS()
макрос в вашем обработчике экспонирующего
события для решения, изображать ли
указатель фокуса. Смотрите gtk_paint_focus()
как один из способов для изображения
фокуса. 
typedef struct _GtkDrawingArea GtkDrawingArea;
Структура GtkDrawingArea содержит только закрытые данные, доступ к которым разрешён только функциям описанным ниже.
GtkWidget* gtk_drawing_area_new (void);
Создаёт новую область рисования.
| Возвращает : | новый GtkDrawingArea | 
void        gtk_drawing_area_size           (GtkDrawingArea *darea,
                                             gint width,
                                             gint height);gtk_drawing_area_size
устарела и не должна использоваться во
вновь создаваемом коде.
(Вместо неё используйте
gtk_widget_set_size_request().)
Устанавливает размер области рисования
в ответ на сигнал "size_request". Область
рисования в действительности может
занимать больший размер чем распределено,
это зависит от того как она упакована
в контейнер. 
| 
 | |
| 
 | Запрашиваемая ширина. | 
| 
 | Запрашиваемая высота. | 
Иногда GtkImage полезен
как альтернатива области рисования. Вы
можете поместить GdkPixmap
в GtkImage и рисовать в
GdkPixmap,
вызывая gtk_widget_queue_draw()
для GtkImage когда вам нужно
обновить экран. 
| Закладки на сайте Проследить за страницей | Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |