160 likes | 192 Views
This tutorial provides a step-by-step guide for creating and initializing a GTK+ program, creating widgets, setting their properties, registering callback routines, defining widget hierarchy, displaying widgets, handling signal events, and exiting the program. Includes code examples.
E N D
GTK+ 프로그래밍 (2) SNSLAB 발표 : 문동규
GTK+ Programming • 기본적 GTK+ 프로그램의 7 단계 • 환경 초기화 • 위젯 생성과 속성 설정 • 콜백 루틴 등록 • 인스턴트 계층 정의 • 위젯을 보임 • 시그널 이벤트 처리 • 종료
환경 초기화 • argc_addr : 명령행의 항목 개수를 가지는 argc주소 • argv_addr :명령행의 항목값을 가지는 argv 주소 /* 예제 */ #include <gtk/gtk.h> Int main(int argc, char *argv[]) { /*환경을 초기화 한다 */ gtk_init(&argc, &argv); /* ….. */ } void gtk_init(int *argc_addr,char ***argv_addr)
환경초기화 • initializes the library for use • sets up default signal handlers • checks the arguments • --gtk-module • --g-fatal-warnings • --gtk-debug • --gtk-no-debug • --gdk-debug • --gdk-no-debug • --display • --sync • --name • --class
윈도우 widget 예제 #include <gtk/gtk.h> int main( int argc, char *argv[] ) { GtkWidget *window; gtk_init (&argc, &argv); /*위젯을 생성한다. */ window= gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show (window); /* 위젯을 보임 */ gtk_main (); return 0; }
초기화, 위젯 생성 int main( int argc, char *argv[] ) { /* GtkWidget is the storage type for widgets */ GtkWidget *window; GtkWidget *button; /* This is called in all GTK applications. Arguments are parsed * from the command line and are returned to the application. */ gtk_init (&argc, &argv); /* create a new window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
속성 설정 & 콜백 루틴 등록 /* 속성 설정 */ gtk_container_set_border_width (GTK_CONTAINER (window), 10); button = gtk_button_new_with_label ("Hello World"); /* Callback routine 등록 */ g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (hello), NULL); g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_widget_destroy), G_OBJECT (window));
콜백 루틴 / * Hello World 출력 */ static void hello( GtkWidget *widget, gpointer data ) { g_print ("Hello World\n"); } /* delete_event */ static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data ) { g_print ("delete event occurred\n"); return TRUE; } /* destroy */ static void destroy( GtkWidget *widget, gpointer data ) { gtk_main_quit (); }
인스턴트 계층 & 위젯 /* 인스턴트 계층을 정의 */ gtk_container_add (GTK_CONTAINER (window), button); /* 위젯을 보이게 한다 */ gtk_widget_show (button); gtk_widget_show (window);
시그널과 이벤트 처리 시그널 Gtk_main() 시그널이 처리되기를 기다린다. 제어권이 Gtk_main()으로 돌아간다. 시그널 핸들러를 호출한다. /* 루프를 처리 */ gtk_main (); return 0; 시그널 핸들러 시그널 핸들러 종료
YOPY Navigator의 구성도 프로그램 실행 Main.c Widget 호출 제어신호 연결 제어권을 gtk_main()으로 넘김 Callback.c Interface.c 이벤트 처리 시그널 신호 전달
YOPY Navigator window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_object_set_data (GTK_OBJECT (window1), "window1", window1); gtk_window_set_title (GTK_WINDOW (window1), "SNS-Client"); gtk_window_set_default_size (GTK_WINDOW (window1), 240, 270); gtk_window_set_policy (GTK_WINDOW (window1), TRUE, TRUE, TRUE);
YOPY Navigator Clist Scroll