노무현 대통령 배너
[GTK+] Step 8. 콤보박스 제어

gtk+콤보박스(combo box)를 생성해서

문자열 리스트를 등록한 다음 이벤트 핸들러에

등록하여 변경된 콤보박스 문자열을 터미널에

출력하는 예제 프로그램입니다.


개발환경
Gentoo Linux 2.6.29-r5
gcc 4.3.3

#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 combo_is_changed(GtkWidget *widget, gpointer gdata)
{
	gchar *str = NULL;
	str = gtk_entry_get_text(GTK_ENTRY(widget));
	g_print("combo changed to %s\n", str);

}

int main(int argc, char **argv)
{
	GtkWidget *w;
	GtkWidget *combo;
	GList * items;

	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);

	//combo box에 넣은 item 리스트를 생성
	items = g_list_alloc();

	items = g_list_append(items, "first");
	items = g_list_append(items, "second");
	items = g_list_append(items, "third");
	items = g_list_append(items, "fourth");

	//combo box 생성
	combo = gtk_combo_new();

	//item 리스트를 combo box에 추가
	gtk_combo_set_popdown_strings(GTK_COMBO(combo), items);
	//combo box가 변경되었을 경우 호출되어질 이벤트 핸들러 등록
	gtk_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->entry), "changed",
			GTK_SIGNAL_FUNC(combo_is_changed), NULL);

	//combo box의 item을 수정할 수 없도록 설정
	gtk_entry_set_editable(GTK_COMBO(combo)->entry, FALSE);

	gtk_widget_show(combo);

	//combo box를 담을 container설정
	gtk_container_border_width(GTK_CONTAINER(w), 15);

	//combo box 추가
	gtk_container_add(GTK_CONTAINER(w), combo);

	//window 사이즈 설정
	gtk_window_set_default_size(w, 200, 100);

	gtk_widget_show(w);

	//gtk 메인 루프
	gtk_main();
	return 0;
}
Posted by ExSuperstar

 Track this back : http://exsuperstar.net/trackback.php?blogid=352
Commented by 나그네 at 2009/07/25/ 05:39
이 프로그램 세그먼테이션 폴트 납니다.
Commented by ExSuperstar at 2009/07/25/ 06:08
나그네// 지적해 주셔서 감사합니다. g_list_alloc()하는게 빠졌었네요 수정했습니다.
블로그에 올리면서 제가 실수했나 보네요 ㅋ 이해해 주세요

Name   Email   Homepage