gtk不使用cairo库的绘图方式:
#include
static gboolean on_expose(GtkWidget *drawArea,GdkEventExpose *event,gpointer data)
{
GdkGC *gc_0, *gc_1, *gc_2;
GdkColor color;
gc_0 = gdk_gc_new(drawArea->window);
color.red = 0;
color.green = 30000;
color.blue = 0;
gdk_gc_set_rgb_fg_color( gc_0, &color );
gc_1= gdk_gc_new( drawArea->window );
color.red = 65535;
color.green = 0;
color.blue = 65535;
gdk_gc_set_rgb_fg_color( gc_1, &color );
gc_2= gdk_gc_new( drawArea->window );
color.red = 0;
color.green = 65522;
color.blue = 33333;
gdk_gc_set_rgb_fg_color( gc_2, &color );
//画矩形
gdk_draw_rectangle( drawArea->window,gc_0,TRUE,5, 5, 100, 100 );
//画圆弧
gdk_draw_arc( drawArea->window,gc_1,FALSE, 150, 50, 100, 100, 0, 64*180);
//写字
PangoLayout *layout = gtk_widget_create_pango_layout( drawArea, "hello world!" );
PangoFontDescription *fontdesc = pango_font_description_from_string( "Comic Sans 24" );
pango_layout_set_font_description( layout, fontdesc );
gdk_draw_layout( drawArea->window,gc_2,50, 150, layout );
//释放资源
pango_font_description_free( fontdesc );
g_object_unref( layout );
g_object_unref( G_OBJECT(gc_0) );
g_object_unref( G_OBJECT(gc_1) );
return TRUE;
}
int main(int argc,char *argv[])
{
GtkWidget *window;
GtkWidget *drawArea;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Center");
gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
drawArea = gtk_drawing_area_new();
gtk_widget_set_size_request(drawArea, 300, 200);
gtk_container_add(GTK_CONTAINER(window), drawArea);
g_signal_connect(drawArea, "expose_event",G_CALLBACK(on_expose), NULL);
g_signal_connect_swapped(G_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
效果:

参考:
gtk画矩形