PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C / GTK 2.0: mehrere Fenster



shutdown
15-09-2008, 00:09
Hallo,

wie kann ich in GTK 2.0 (mit C) einen Button erzeugen, der, wenn er geklickt wird, eine Funktion mit mehreren Argumenten aufruft?
Bis jetzt kenne ich nur g_signal_connect(_swapped), hier kann man allerdings keine Funktion mit beliebig vielen Argumenten aufrufen lassen...oder doch?

Peter

Beatkiller
18-09-2008, 13:40
Hab mir das jetzt nicht angesehen, aber kannst du nicht einen Zeiger auf eine Struktur als Argument übergeben? Dann kannst du deine Struktur nach belieben zusammen bauen, und in der Methode über den Zeiger darauf zugreifen.

EDIT:

Ich hab jetzt mal nen Blick drauf geworfen und es ist genau so, wie ich es vorgeschlagen habe:

Das ist die Call-Back-Methode, der zweite Parameter ist ein Zeiger.


int handlerfunktion(GtkButton *button, gpointer user_data);


Wenn du nun den Button button1 erzeugt hast, kannst du dir auch eine Struktur bauen:



struct myButton_Parameters
{
unsigned int id;
char *some_text;
long some_value;
unsigned short flags;
};


Nun erzeugst du aus der Struktur eine Variable und übergibst ihr gewünschte Daten (das ist nur ein Beispiel):



myButton_Parameters params;
params.id = 276;
params.some_text = specific_character_array;
params.some_value = 42;
params.flags = FLAGS_NONE;


Nun kannst du das an deine Callback übergeben:



g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK(handlerfunktion), &params);


Innerhalb der Callback kannst du nun darauf zugreifen:



int handlerfunktion(GtkButton *button, gpointer user_data)
{
printf("Text in params: %s\n", (myButton_Parameters*)user_data->some_text);
}


Da ich das aus den Fingern gesaugt habe, und nicht getestet, kann der Code Fehler enthalten. Sollte aber eine konkrete Anleitung sein, wie das aussehen kann.

shutdown
19-09-2008, 13:05
Sehr gute Idee, hätte ich eigentlich auch selber draufkommen können...mir geht es eigentlich darum, mehrere Text-Entries in der aufgerufenen Funktion auslesen zu können, die kann ich aber auch in eine Struktur packen - müsste zumindest theoretisch funktionieren, werde das gleich mal testen!

Danke!

Peter