반응형
gtk+의 위젯에서 컨테이너에는 단 하나의
위젯만 들어갈 수 있습니다.
예를 들어 앞에서 작성한
Step 1. 버튼 생성 및 이벤트 핸들러 등록의
예제 프로그램에서 버튼을 하나 더 생성한
다음에 gtk_container_add()함수를 이용해서
버튼을 추가한다고 해도 화면상에는 버튼이
보이지 않습니다.
그러나 패킹박스를 이용하면 여러 개의 위젯을 하나의 컨테이너에 넣을 수 있습니다.
아래는 패킹박스를 이용하는 예제 코드입니다.
개발환경
Gentoo Linux 2.6.29-r5
gcc 4.3.3
에서
우분투 9.04
로 변경함
위젯만 들어갈 수 있습니다.
예를 들어 앞에서 작성한
Step 1. 버튼 생성 및 이벤트 핸들러 등록의
예제 프로그램에서 버튼을 하나 더 생성한
다음에 gtk_container_add()함수를 이용해서
버튼을 추가한다고 해도 화면상에는 버튼이
보이지 않습니다.
그러나 패킹박스를 이용하면 여러 개의 위젯을 하나의 컨테이너에 넣을 수 있습니다.
아래는 패킹박스를 이용하는 예제 코드입니다.
개발환경
Gentoo Linux 2.6.29-r5
gcc 4.3.3
에서
우분투 9.04
로 변경함
#include<config.h>
#include<gtk/gtk.h>
#include<stdio.h>
int destroy_func(GtkWidget *widget, gpointer gdata)
{
g_print("quit....\n");
//gtk 프로그램 종료
gtk_main_quit();
return FALSE;
}
void button1_is_clicked(GtkWidget *widget, gpointer gdata)
{
g_print("button 1 is clicked!\n");
}
void button2_is_clicked(GtkWidget *widget, gpointer gdata)
{
g_print("button 2 is clicked!\n");
}
int main(int argc, char **argv)
{
GtkWidget *w;
GtkWidget *button;
GtkWidget *box;
gtk_init(&argc, &argv);
//window 생성
w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//종료시 callback function 등록
gtk_signal_connect( GTK_OBJECT(w), "delete_event",
GTK_SIGNAL_FUNC(destroy_func), NULL);
//vertical box를 생성
// box = gtk_vbox_new(FALSE, 0);
box = gtk_hbox_new(FALSE, 0);
//button 생성
button = gtk_button_new_with_label("Click me 1");
//button 클릭시 callback function 등록
gtk_signal_connect( GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(button1_is_clicked), NULL);
gtk_widget_show(button);
//button을 box에 packing
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
button = gtk_button_new_with_label("Click me 2");
//button 클릭시 callback function 등록
gtk_signal_connect( GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(button2_is_clicked), NULL);
gtk_widget_show(button);
//button을 box에 packing
gtk_box_pack_start(GTK_BOX(box), button, FALSE, FALSE, 0);
//box를 container에 추가
gtk_container_add(GTK_CONTAINER(w), box);
//box를 담을 container설정
gtk_container_border_width(GTK_CONTAINER(w), 15);
gtk_widget_show(box);
//window 사이즈 설정
gtk_window_set_default_size(w, 200, 100);
gtk_widget_show(w);
//gtk 메인 루프
gtk_main();
return 0;
}
반응형