GTK Gossip: GtkDrawingArea
2010-12-10 14:43
411 查看
GtkDrawingArea是一個用來進行繪圖的元件,繪圖的時候,是將之繪製在window成員上,在繪圖時要處理的事件有:
realize:元件被初始時
configure_event:元件尺寸改變時
expose_event:元件需要重繪時
要在GtkDrawingArea上繪圖,完整的函式內容可以參考 Drawing Primitives
,基本上每個繪圖函式都會有一個GdkGC引數,它主要包括了前景色、背景色、線寬等資訊,您從GtkDrawingArea的GtkStyle中可以取得對應的GdkGC資訊。
下面這個程式是個簡單的示範:
gtkdrawingarea_demo.c
執行結果如下:
realize:元件被初始時
configure_event:元件尺寸改變時
expose_event:元件需要重繪時
要在GtkDrawingArea上繪圖,完整的函式內容可以參考 Drawing Primitives
,基本上每個繪圖函式都會有一個GdkGC引數,它主要包括了前景色、背景色、線寬等資訊,您從GtkDrawingArea的GtkStyle中可以取得對應的GdkGC資訊。
下面這個程式是個簡單的示範:
gtkdrawingarea_demo.c
#include <gtk/gtk.h> gboolean expose_event_callback(GtkWidget *widget, GdkEventExpose *event, gpointer data) { GdkGC *gc = widget->style->fg_gc[GTK_WIDGET_STATE(widget)]; GdkDrawable *drawable = widget->window; GdkColor color; // 畫一條線 gdk_draw_line(drawable, gc, 10, 10, 100, 10); // 畫一個空心矩形 gdk_draw_rectangle(drawable, gc, FALSE, 10, 20, 100, 50); color.green = 65535; color.blue = 0; gdk_gc_set_rgb_fg_color(gc, &color); // 畫一個實心矩形 gdk_draw_rectangle(drawable, gc, TRUE, 10, 80, 100, 50); color.green = 0; color.blue = 65535; gdk_gc_set_rgb_fg_color(gc, &color); // 畫一個扇形 gdk_draw_arc(drawable, gc, TRUE, 10, 150, 100, 50, 45 * 64, 300 * 64); // 畫一張圖 gdk_draw_pixbuf(drawable, gc, gdk_pixbuf_new_from_file("caterpillar.jpg", NULL) , 0, 0, 150, 10, -1, -1, GDK_RGB_DITHER_NORMAL, 0, 0); return TRUE; } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *drawing_area; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "GtkDrawingArea"); drawing_area = gtk_drawing_area_new(); gtk_widget_set_size_request(drawing_area, 350, 200); g_signal_connect(GTK_OBJECT(drawing_area), "expose_event", G_CALLBACK(expose_event_callback), NULL); gtk_container_add(GTK_CONTAINER(window), drawing_area); g_signal_connect(GTK_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; }
執行結果如下:
相关文章推荐
- 关于GtkDrawingArea接收鼠标、键盘事件
- GTK+中使用GtkDrawingArea绘制文本,可实现跑马灯效果
- PyGobject(六十八)Gtk.Widget之Gtk.DrawingArea
- GTK Gossip: 目錄資訊
- (转)Creating a GTK notification area icon using Mono and C#
- 关于drawing_area绘图区的显示问题
- GTK Gossip: GtkHBox 與 GtkVBox
- GTK Gossip: GtkEntry
- GTK Gossip: GtkToolBar
- GTK Gossip: GIOChannel 與 Pipe
- GTK Gossip: GtkFrame 與 GtkButtonBox
- GTK Gossip: GtkSpinButton
- GTK Gossip: GtkStatusBar
- GTK Gossip: GString
- 关于drawing_area绘图区的显示问题
- GTK Gossip: GtkTextView
- GTK Gossip: GtkStyle 與資源檔
- GTK Gossip: GArray、GPtrArray、GByteArray
- GTK Gossip: GtkTable
- GTK Gossip: GtkLabel