CB的global compiler settings -> compiler settings -> Other options 填-mms-bitfields
include:
$(CODEBLOCKS)\build\gtk\include\gtk-2.0
$(CODEBLOCKS)\build\gtk\include\glib-2.0
$(CODEBLOCKS)\build\gtk\include\cairo
$(CODEBLOCKS)\build\gtk\include\pango-1.0
$(CODEBLOCKS)\build\gtk\include\atk-1.0
link目錄
$(CODEBLOCKS)\build\gtk\lib
link libraries加入
gdk-win32-2.0
gtk-win32-2.0
atk-1.0
gdk_pixbuf-2.0
pangowin32-1.0
gdi32
pangocairo-1.0
pango-1.0
cairo
gobject-2.0
gmodule-2.0
glib-2.0
intl
main.cpp
#include <gtk/gtk.h> //#include <stdio.h> #include <stdlib.h> static GdkPixmap *pixmap = NULL; /* 創建一個適當大小的後端位圖 */ static gboolean configure_event( GtkWidget *widget, GdkEventConfigure *event ) { if (pixmap) g_object_unref (pixmap); pixmap = gdk_pixmap_new (widget->window, widget->allocation.width, widget->allocation.height, -1); gdk_draw_rectangle (pixmap, widget->style->white_gc, TRUE, 0, 0, widget->allocation.width, widget->allocation.height); return TRUE; } /* 從後端位圖重新繪製螢幕 */ static gboolean expose_event(GtkWidget *widget,GdkEventExpose *event ) { gdk_draw_drawable (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); return FALSE; } /* 在螢幕上繪製一個矩形 */ static void draw_brush( GtkWidget *widget, gdouble x,gdouble y) { GdkRectangle update_rect; update_rect.x = x - 5; update_rect.y = y - 5; update_rect.width = 10; update_rect.height = 10; gdk_draw_rectangle (pixmap,widget->style->black_gc,TRUE,update_rect.x, update_rect.y,update_rect.width, update_rect.height); gtk_widget_queue_draw_area (widget, update_rect.x, update_rect.y, update_rect.width, update_rect.height); } static gboolean button_press_event(GtkWidget *widget, GdkEventButton *event ) { if (event->button == 1 && pixmap != NULL) draw_brush(widget, event->x, event->y); return TRUE; } static gboolean motion_notify_event( GtkWidget *widget, GdkEventMotion *event ) { int x, y; GdkModifierType state; if (event->is_hint) gdk_window_get_pointer (event->window, &x, &y, &state); else { x = event->x; y = event->y; state =(GdkModifierType) event->state; } if (state & GDK_BUTTON1_MASK && pixmap != NULL) draw_brush (widget, x, y); return TRUE; } gint processDelete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { g_print ("delete event occurred\n"); return FALSE; } static void processButton( GtkWidget *widget, gpointer data) { g_print ("Hello again - %s was pressed\n", (gchar *) data); if (!g_strcmp0((gchar *)data ,"button 2")) { system("dir"); } } void precessDestroy(GtkWidget *widget, gpointer data ) { gtk_main_quit(); } int main(int argc, char* argv[]) { GtkWidget* window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER (window), 100); gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); g_signal_connect(window, "delete_event", G_CALLBACK(processDelete_event), NULL); g_signal_connect(window, "destroy", G_CALLBACK(precessDestroy), NULL); gtk_window_set_title(GTK_WINDOW(window), "哈囉!GTK+!"); //------------------------------------------------------ GtkWidget *vbox = gtk_vbox_new(FALSE, 20); gtk_container_add (GTK_CONTAINER(window), vbox); gtk_widget_show (vbox); GtkWidget *label = gtk_label_new ("底下是塗鴉牆"); gtk_box_pack_start (GTK_BOX(vbox), label, FALSE, FALSE, 0); gtk_widget_show (label); GtkWidget *button = gtk_button_new_with_label("Exit"); gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0); g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), window); gtk_widget_show (button); //------------------------------------------------ GtkWidget *hbox = gtk_hbox_new (TRUE, 30); gtk_box_pack_end (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); button = gtk_button_new_with_label("Button1"); gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0); g_signal_connect(button, "clicked",G_CALLBACK (processButton), (gpointer)"button 1"); gtk_widget_show (button); button = gtk_button_new_with_label("Button2-Do DIR"); gtk_box_pack_end(GTK_BOX(hbox), button, TRUE, TRUE, 0); g_signal_connect(button, "clicked",G_CALLBACK (processButton), (gpointer)"button 2"); gtk_widget_show (button); //------------------------------------------------- GtkWidget *drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (GTK_WIDGET(drawing_area), 200, 200); gtk_box_pack_start (GTK_BOX(vbox), drawing_area, TRUE, TRUE, 0); g_signal_connect (drawing_area, "expose_event",G_CALLBACK(expose_event), NULL); g_signal_connect (drawing_area,"configure_event",G_CALLBACK (configure_event), NULL); /* 事件信號 */ g_signal_connect (drawing_area, "motion_notify_event",G_CALLBACK(motion_notify_event), NULL); g_signal_connect (drawing_area, "button_press_event",G_CALLBACK (button_press_event), NULL); gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK| GDK_LEAVE_NOTIFY_MASK| GDK_BUTTON_PRESS_MASK| GDK_POINTER_MOTION_MASK| GDK_POINTER_MOTION_HINT_MASK); gtk_widget_show (drawing_area); gtk_widget_show(window); gtk_main(); return 0; }
沒有留言:
張貼留言