반응형
gtk+의 위젯에서 컨테이너에는 단 하나의

위젯만 들어갈 수 있습니다.

예를 들어 앞에서 작성한

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;
}
반응형

+ Recent posts