Anzeige:
Ergebnis 1 bis 3 von 3

Thema: C / GTK 2.0: mehrere Fenster

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.07.2007
    Beiträge
    38

    C / GTK 2.0: Funktion mit vielen Argumenten über geklickten Button?

    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
    Geändert von shutdown (18-09-2008 um 11:10 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.06.2004
    Beiträge
    101
    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.
    Code:
    int handlerfunktion(GtkButton *button, gpointer user_data);
    Wenn du nun den Button button1 erzeugt hast, kannst du dir auch eine Struktur bauen:

    Code:
    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):

    Code:
    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:

    Code:
    g_signal_connect(G_OBJECT(button1), "clicked", G_CALLBACK(handlerfunktion), &params);
    Innerhalb der Callback kannst du nun darauf zugreifen:

    Code:
    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.
    Geändert von Beatkiller (18-09-2008 um 19:31 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.07.2007
    Beiträge
    38
    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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •