がんばって英語で書くブログ
英語勉強中なので、ブログも英語で書こうかと。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GTK+ studying
This is my memo.

How do I create button?.
warning! I didn't call free() because I use asprintf().
so this program will have memory leak problem.


#define _GNU_SOURCE
#include <stdio.h>
#include <gtk/gtk.h>

static gboolean button_clicked(GtkWidget *widget,
gpointer data)
{
g_print("%s\n", (gchar *) data);
return FALSE;
}

static GtkWidget *create_button(char *label, char *value)
{
GtkWidget *button;

button = gtk_button_new_with_label(label);
g_signal_connect(G_OBJECT(button), "clicked",
G_CALLBACK(button_clicked), value);

return button;
}

static GtkWidget *create_hbox(void)
{
return gtk_hbox_new(TRUE, 5);
}

void create_window(void)
{
GtkWidget *window;
GtkWidget *hbox;
GtkWidget *button[3];
int i = 0;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "button-test");

gtk_container_set_border_width(GTK_CONTAINER(window), 5);
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);


hbox = create_hbox();

for (i = 0; i < sizeof(button) / sizeof(button[0]); i++) {
char *title = NULL;
char *value = NULL;

asprintf(&title, "button%d", i);
asprintf(&value, "button%d clicked", i);

button[i] = create_button(title, value);

gtk_box_pack_start(GTK_BOX(hbox), button[i], TRUE, TRUE, 0);

gtk_widget_show(button[i]);
}


gtk_container_add(GTK_CONTAINER(window), hbox);

gtk_widget_show(hbox);
gtk_widget_show(window);

}

int main(int argc, char **argv)
{
gtk_init(&argc, &argv);

create_window();

gtk_main();

return 0;
}



This is Makefile

CC=gcc

CFLAGS = -Wall
CFLAGS += -O2
CFLAGS += -g
CFLAGS += `pkg-config --cflags gtk+-2.0`

LDFLAGS = `pkg-config --libs gtk+-2.0`

target = button-test

objs = button-test.o

all: $(objs)
$(CC) $(LDFLAGS) $(objs) -o $(target)

.c.o:
$(CC) $(CFLAGS) -c $<
clean:
-rm -fr core *~ *.o $(target)




スポンサーサイト

テーマ:英語日記 - ジャンル:学問・文化・芸術

この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://foobar.blog23.fc2.com/tb.php/156-cb9c52ef
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。