GTK+ 프로그래밍 (2) SNSLAB 발표 : 문동규
GTK+ Programming 기본적 GTK+ 프로그램의 7 단계 환경 초기화 위젯 생성과 속성 설정 콜백 루틴 등록 인스턴트 계층 정의 위젯을 보임 시그널 이벤트 처리 종료
void gtk_init(int *argc_addr,char ***argv_addr) 환경 초기화 void gtk_init(int *argc_addr,char ***argv_addr) argc_addr : 명령행의 항목 개수를 가지는 argc주소 argv_addr : 명령행의 항목값을 가지는 argv 주소 /* 예제 */ #include <gtk/gtk.h> Int main(int argc, char *argv[]) { /*환경을 초기화 한다 */ gtk_init(&argc, &argv); /* ….. */ }
환경초기화 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);
속성 설정 & 콜백 루틴 등록 button = gtk_button_new_with_label ("Hello World"); /* 속성 설정 */ 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));
GtkButton 시그널 클래스 트리
콜백 루틴 / * 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, gtk_main_quit ();
인스턴트 계층 & 위젯 /* 인스턴트 계층을 정의 */ gtk_container_add (GTK_CONTAINER (window), button); /* 위젯을 보이게 한다 */ gtk_widget_show (button); gtk_widget_show (window);
시그널과 이벤트 처리 시그널 /* 루프를 처리 */ gtk_main (); return 0; Gtk_main() 시그널이 처리되기를 기다린다. 제어권이 Gtk_main()으로 돌아간다. 시그널 핸들러를 호출한다. 시그널 핸들러 /* 루프를 처리 */ gtk_main (); return 0; 시그널 핸들러 종료
예제 실행화면
YOPY Navigator의 구성도 Main.c 프로그램 실행 Callback.c Interface.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 클릭
YOPY Navigator Clist Scroll