G
Hallo,
natürlich funktioniert es nicht, wenn man es falsch benutzt. Du hast ja auch gar kein Label, wo du Text setzen könntest.
So geht das:
#include <gtk/gtk.h>
/* Ein paar Testausgaben */
static gchar *array[] = { "This is short",
"But this one is a real looooooong one",
"I'm just between the other two",
"Look at me, I'll stretch the window once more ;-)",
"And I'm even\nmultiline"
};
/* Unsere Applikation. Enthält einige Gtk-Komponenten*/
typedef struct {
GtkWidget *button, *label, *vbox, *window;
} Application;
Application *app;
/* Die zwei Signal-Funktionen */
static void destroy(GtkWidget *w, gpointer data) {
gtk_main_quit();
}
static void clicked(GtkWidget *widget, gpointer data) {
static int i = 0;
if (i > 4)
i = 0;
gtk_label_set_text(GTK_LABEL(app->label), array[i++]);
}
int main(int argc, char **argv) {
gtk_init(&argc, &argv);
app = malloc(sizeof(Application));
/* GtkButton initalisieren */
app->button = gtk_button_new();
gtk_button_set_label(GTK_BUTTON(app->button), "OK");
/* GtkLabel initalisieren */
app->label = gtk_label_new("Click the button");
gtk_label_set_single_line_mode(GTK_LABEL(app->label), FALSE);
/* GtkVBox mit GtkButton und GtkLabel initalisieren */
app->vbox = gtk_vbox_new(FALSE, 20);
gtk_container_add(GTK_CONTAINER(app->vbox), app->button);
gtk_container_add(GTK_CONTAINER(app->vbox), app->label);
app->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(app->window), "Test");
/* GtkVBox zum GtkWindow hinzufügen */
gtk_container_add(GTK_CONTAINER(app->window), app->vbox);
/* Signal-Handler setzen */
g_signal_connect(G_OBJECT(app->window),"destroy", G_CALLBACK(destroy), NULL);
g_signal_connect(G_OBJECT(app->button),"clicked", G_CALLBACK(clicked), NULL);
/* Und los geht die wilde Fahrt */
gtk_widget_show_all(app->window);
gtk_main();
free(app);
return 0;
}
Cheers
GPC