mit gtk+ zeichnen
-
hallo,
ich habe ein problem. für meine übung erstell ich ein c-programm, es funktioniert nicht, und ich finde programmbeispiel, wo ich abschauen kann. alles was ich brauche ist programm, das z.b. eine linie zeichnet. kann mir jemand da helfen?
danke
-
für gtk+ gibt es einige tutorials im netz http://www.gtk.org/tutorial/
zum beispiel..aber ist kein ansi c, da können die linuxer sicher weiterhelfen..
-
ich kenne dieses toturial, aber das hilft mir nicht weiter, ich habe viel gesucht, ich will zeichnen, und das schaff ich nicht
dann vielleicht eine eine andere frage:
ich bekomme die fehlermeldung: assertion `drawable != NULL' failed.
was heisst das?
vielen dank
-
*duck*
ich weiß, gehört nicht hierher..
so geht es auf jeden mal bei mir mit dem zeichnen...
#include <stdio.h> #include <string.h> #include <gtk/gtk.h> gint QUIT(GtkWidget *widget,gpointer data); gint DRAW_FIGURE(GtkWidget *widget,gpointer data); int main(int argc,char *argv[]){ GtkWidget *window; GtkWidget *scrolled_window; GtkWidget *draw_area_1; GtkWidget *button; GtkWidget *vbox; GtkWidget *hbox; //gtk_set_locale(); gtk_init(&argc,&argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),"DRAW AREA TEST WINDOW"); gtk_signal_connect(GTK_OBJECT(window),"delete_event", GTK_SIGNAL_FUNC(QUIT),NULL); vbox=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),vbox); gtk_container_border_width(GTK_CONTAINER(vbox),5); gtk_widget_show(vbox); // //??? // //?????????? scrolled_window=gtk_scrolled_window_new(NULL,NULL); gtk_widget_set_usize(GTK_WIDGET(scrolled_window),579,280); gtk_container_set_border_width(GTK_CONTAINER(scrolled_window),5); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_NEVER,GTK_POLICY_NEVER); draw_area_1=gtk_drawing_area_new(); gtk_widget_set_name(draw_area_1,"DRAW AREA 1"); gtk_widget_show(draw_area_1); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_window),draw_area_1); gtk_box_pack_start(GTK_BOX(vbox),scrolled_window,FALSE,FALSE,0); // //??? // hbox=gtk_hbox_new(FALSE,0); gtk_widget_show(hbox); //DRAW 3D??? button=gtk_button_new_with_label("DRAW"); gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,0); gtk_widget_set_name(button,"DRAW"); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(DRAW_FIGURE),draw_area_1); //CLOSE??? button=gtk_button_new_with_label("CLOSE"); gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,0); gtk_widget_set_name(button,"CLOSE"); gtk_widget_show(button); gtk_signal_connect(GTK_OBJECT(button),"clicked", GTK_SIGNAL_FUNC(QUIT),NULL); gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0); gtk_widget_show_all(window); gtk_main(); } gint QUIT(GtkWidget *widget,gpointer data){ gtk_main_quit(); return TRUE; } gint DRAW_FIGURE(GtkWidget *widget,gpointer data){ GtkWidget *drawing_area=(GtkWidget *)data; GdkDrawable *drawable; GdkColor yellow={0,0xffff,0xffff,0x0000}; GdkGC *yellowgc; GdkColormap *cmap; //???????(????????????????????????????) GdkFont *font=gdk_fontset_load ("-*-mincho-medium-r-normal-*-14-140-*-*-c-*-jisx0208.1983-0"); int sx,sy; GdkPoint points[5]; points[0].x=200;points[0].y=130; points[1].x=250;points[1].y=200; points[2].x=100;points[2].y=150; points[3].x=200;points[3].y=220; points[4].x=220;points[4].y=80; // //========================================================= // drawable=drawing_area->window; sy=drawing_area->allocation.height; sx=drawing_area->allocation.width; //gdk_draw_rectangle gdk_draw_rectangle(drawable, drawing_area->style->black_gc, TRUE,0,0,sx,sy); cmap=gdk_colormap_get_system(); yellowgc=gdk_gc_new(drawable); if(!gdk_color_alloc(cmap,&yellow)){ g_error("couldn't allocate color"); } gdk_gc_set_foreground(yellowgc,&yellow); // //========================================================= // if(strcmp("DRAW AREA 1",gtk_widget_get_name(drawing_area))==0){ gdk_draw_string(drawable,font, yellowgc,sx/2-49,sy/2+7,"[DRAWING AREA]"); //gdk_draw_line gdk_draw_line(drawable, drawing_area->style->white_gc,32,21,sx-32,21); gdk_draw_line(drawable, drawing_area->style->white_gc,32,sy-21,sx-32,sy-21); gdk_draw_line(drawable, drawing_area->style->white_gc,32,21,32,sy-21); gdk_draw_line(drawable, drawing_area->style->white_gc,sx-32,21,sx-32,sy-21); //gdk_draw_arc ??????? gdk_draw_arc(drawable, drawing_area->style->white_gc,FALSE,60,60,30,60,0*64,360*64); //gdk_draw_point ?????? gdk_draw_point(drawable, drawing_area->style->white_gc,100,100); gdk_draw_point(drawable, drawing_area->style->white_gc,105,105); gdk_draw_point(drawable, drawing_area->style->white_gc,105,100); gdk_draw_point(drawable, drawing_area->style->white_gc,100,105); //gdk_draw_polygon gdk_draw_polygon(drawable,drawing_area->style->white_gc,TRUE,points,5); } return (TRUE); }
vergiß nicht, die gdk lib auch mit einzubinden neben der gtk..
sieht gut aus.hoffe es funzt bei dir auch.
-
vielen dank elise, du bist wirklich sehr nett.
eine kleinigkeit, es erscheint die warnung:
Gdk-CRITICAL **: file gdkdraw.c: line 213 (gdk_draw_string): assertion `font != NULL' failed.
aber das hat mit der schriftart zu tun, was nicht wichtig ist.
danke nochmal