background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Przykład u˙zycia kontrolek

Kurs C z elementami C++

Marek Piotrów - Wykład 11

GTK - graficzny interfejs u˙zytkownika w C oraz

skrypty dla make

18 grudnia 2007

Uwaga: w załacznikach do tego pliku znajduj ˛

a si ˛e teksty

prezentowanych przykładów (do łatwiejszego kopiowania).

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Przykład u˙zycia kontrolek

Bibioteka GTK+

GTK+ jest darmow ˛

a bibliotek ˛

a przeznaczon ˛

a do tworzenia

graficznego interfejsu u˙zytkownika.

Została napisana w C na potrzeby programu GIMP (st ˛

ad

nazwa Gimp ToolKid), ale ma struktur ˛e obiektow ˛

a.

Mozna z niej korzysta´c w wielu j ˛ezykach programowania
(C, C++, C#, Ada, Perl, itd.).

Programy napisane z u˙zyciem tej biblioteki s ˛

a przeno´sne

pomiedzy ró˙znymi systemami operacyjnymi.

GTK+ korzysta z bibliotek: GLib, Pango i ATK (trzeba je
zainstalowa´c, aby mo˙zna było kompilowa´c programy
u˙zywaj ˛

ace GTK).

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Przykład u˙zycia kontrolek

GTK-test: obsługa zdarze ´n

#include <gtk/gtk.h>

static void test_nacisniecia( GtkWidget *widget, gpointer

data )

{

g_print ("GTK-test - %s zastal nacisniety\n", (gchar *) data);

}

static gboolean wyjscie_sys( GtkWidget *widget,

GdkEvent

*event,

gpointer

data )

{

gtk_main_quit ();

return FALSE;

}

static void wyjscie_prz( GtkWidget *widget, gpointer

data )

{

gtk_main_quit ();

return ;

}

static void wprowadzony_tekst( GtkWidget *widget, GtkWidget *text )
{

const gchar *wejscie;
wejscie = gtk_entry_get_text (GTK_ENTRY (text));

g_print ("GTK-test wprowadzono: %s\n", wejscie);

}

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Przykład u˙zycia kontrolek

GTK-test - funkcja main

int main( int

argc,char *argv[] )

{

GtkWidget *window;
GtkWidget *box1, *box2;
GtkWidget *button;
GtkWidget *text;
gint

tmp_pos;

gtk_init (&argc, &argv);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_window_set_title (GTK_WINDOW (window), "GTK - test");

g_signal_connect (G_OBJECT (window), "delete_event",

G_CALLBACK (wyjscie_sys), NULL);

gtk_container_set_border_width (GTK_CONTAINER (window), 10);

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Przykład u˙zycia kontrolek

GTK-test pojemnik i przycisk

box1 = gtk_vbox_new (FALSE, 0);

gtk_container_add (GTK_CONTAINER (window), box1);

button = gtk_button_new_with_label ("Kliknij tu");

g_signal_connect (G_OBJECT (button), "clicked",

G_CALLBACK (test_nacisniecia), (gpointer) "Przycisk");

gtk_box_pack_start (GTK_BOX(box1), button, TRUE, TRUE, 0);

gtk_widget_show (button);

text = gtk_entry_new ();

gtk_entry_set_max_length (GTK_ENTRY (text), 50);

g_signal_connect (G_OBJECT (text), "activate",

G_CALLBACK (wprowadzony_tekst),

(gpointer) text);

gtk_entry_set_text (GTK_ENTRY (text), "Wprowadz");

tmp_pos = GTK_ENTRY (text)->text_length;

gtk_editable_insert_text (GTK_EDITABLE (text), " jakis tekst", -1, &tmp_pos);

gtk_editable_select_region (GTK_EDITABLE (text),

0, GTK_ENTRY (text)->text_length);

gtk_box_pack_start (GTK_BOX (box1), text, TRUE, TRUE, 0);

gtk_widget_show (text);

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Przykład u˙zycia kontrolek

GTK-test: przycisk ko ´ncz ˛

acy

box2 = gtk_hbox_new (FALSE, 0);

button = gtk_button_new_with_label ("Koniec");

g_signal_connect (G_OBJECT (button), "clicked",

G_CALLBACK (wyjscie_prz), NULL);

gtk_box_pack_start(GTK_BOX (box2), button, TRUE, FALSE, 0);

gtk_box_pack_start(GTK_BOX (box1), box2, TRUE, TRUE, 0);

gtk_widget_show (button);

gtk_widget_show (box2);

gtk_widget_show (box1);

gtk_widget_show (window);

gtk_main ();

return 0;

}

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Przykład u˙zycia kontrolek

Uzyskany efekt

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Proste skrypty buduj ˛

ace

Zło˙zony skrypt buduj ˛

acy

Zło˙zony skrypt buduj ˛

acy - c.d.

Narz ˛edzia do budowanie - make i makefile

kalkulator: oblicz2.c stos.c znak.c

gcc stos.c oblicz2.c znak.c -o kalkulator

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Proste skrypty buduj ˛

ace

Zło˙zony skrypt buduj ˛

acy

Zło˙zony skrypt buduj ˛

acy - c.d.

Najprostszy makefile

# najprostszy makefile dla programu kalkulator

kalkulator: oblicz2.o stos.o znak.o

gcc stos.o oblicz2.o znak.o -o kalkulator

znak.o: znak.c

gcc -c znak.c -o znak.o

stos.o: stos.c

gcc -c stos.c -o stos.o

oblicz2.o: oblicz2.c

gcc -c oblicz2.c -o oblicz2.o

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Proste skrypty buduj ˛

ace

Zło˙zony skrypt buduj ˛

acy

Zło˙zony skrypt buduj ˛

acy - c.d.

Prosty makefile

# prosty makefile dla programu: kalkulator

CFLAGS= -std=c99 -pedantic

# ogolne flagi kompilacji

NAME = kalkulator

$(NAME): oblicz2.o stos.o znak.o

gcc $(CFLAGS) stos.o oblicz2.o znak.o -o $(NAME)

znak.o: znak.c

gcc -c $(CFLAGS) znak.c -o znak.o

stos.o: stos.c

gcc -c $(CFLAGS) stos.c -o stos.o

oblicz2.o: oblicz2.c

gcc -c $(CFLAGS) oblicz2.c -o oblicz2.o

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Proste skrypty buduj ˛

ace

Zło˙zony skrypt buduj ˛

acy

Zło˙zony skrypt buduj ˛

acy - c.d.

Typowy makefile

# prosty makefile dla programu: kalkulator

CFLAGS = -std=c99 -pedantic

# ogolne flagi kompilacji dla modulow

LFLAGS = -lm

# ogolne flagi konsolidacji programu

NAME = kalkulator

# nazwa programu wynikowego

SRC = oblicz2.c stos.c znak.c

# nazwy wszystkich plikow zrodlowych

OBJS = oblicz2.o stos.o znak.o

# nazwy wszystkich modulow

YOU : $(SRC) $(NAME)

$(NAME): $(OBJS)

gcc $(CFLAGS) $(OBJS) -o $(NAME) $(LFLAGS)

znak.o: znak.c

gcc -c $(CFLAGS) znak.c -o znak.o

stos.o: stos.c

gcc -c $(CFLAGS) stos.c -o stos.o

oblicz2.o: oblicz2.c

gcc -c $(CFLAGS) oblicz2.c -o oblicz2.o

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Proste skrypty buduj ˛

ace

Zło˙zony skrypt buduj ˛

acy

Zło˙zony skrypt buduj ˛

acy - c.d.

Makefile dla Borland’a bcc

# prosty makefile dla programu: kalkulator

CFLAGS =

# ogolne flagi kompilacji dla modulow

LFLAGS =

# ogolne flagi konsolidacji programu

NAME = kalkulator

# nazwa programu wynikowego

SRC = oblicz2.c stos.c znak.c

# nazwy wszystkich plikow zrodlowych

OBJS = oblicz2.obj stos.obj znak.obj

# nazwy wszystkich modulow

YOU : $(SRC) $(NAME)

$(NAME): $(OBJS)

bcc $(CFLAGS) -e$(NAME) $(OBJS) $(LFLAGS)

znak.obj: znak.c

bcc -c $(CFLAGS) -oznak.obj znak.c

stos.obj: stos.c

bcc -c $(CFLAGS) -ostos.obj stos.c

oblicz2.obj: oblicz2.c

bcc -c $(CFLAGS) -ooblicz2.obj oblicz2.c

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Proste skrypty buduj ˛

ace

Zło˙zony skrypt buduj ˛

acy

Zło˙zony skrypt buduj ˛

acy - c.d.

Profesjonalny makefile dla Unix

# A bit primitive makefile for Unices

OPTIONS = -DNDEBUG

# OPTIONS = -DPOOR_LIBS -DNDEBUG

# Use the above line if you have problems with compilation due to

# missing declarations. This enables including of "fixes.h", where you

# can place or include what is missing.

# when finished, uncomment -DNDEBUG to remove debugging code

CFLAGS = -s -funsigned-char -O2 # -fno-exceptions

# when finished, add -O2 to CFLAGS

# -fno-exceptions is for gcc 2.8.x

# (I don’t use exceptions -> executable will be smaller)

LFLAGS = -lm # -lstdc++

SRC = euphoria.l euphoria.y symtab.cc symtab.h fixes.h init.cc code.h code.cc \

errors.h seq.cc seq.h

OBJS = symtab.o init.o code.o euphoria.o seq.o

NAME = euphoria

YOU : $(SRC) $(NAME)

Marek Piotrów - Wykład 11

Kurs C z elementami C++

background image

GTK - tworzenie okienek w C

Budowanie wielomodułowych programów

Proste skrypty buduj ˛

ace

Zło˙zony skrypt buduj ˛

acy

Zło˙zony skrypt buduj ˛

acy - c.d.

Profesjonalny makefile dla Unix

$(NAME) : $(OBJS)

gcc $(CFLAGS) $(OPTIONS) -o $(NAME) $(OBJS) $(LFLAGS)

lex.yy.c : euphoria.l

flex -s euphoria.l

euphoria.tab.c : euphoria.y

bison euphoria.y

euphoria.o : euphoria.tab.c lex.yy.c

gcc -c $(CFLAGS) $(OPTIONS) -x c++ $< -o $@

%.o : %.cc

gcc -c $(CFLAGS) $(OPTIONS) $< -o $@

clean:

rm -f $(OBJS) $(NAME)

Marek Piotrów - Wykład 11

Kurs C z elementami C++


Document Outline