IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

creation et communication entre widgets


Sujet :

GTK+ avec C & C++

  1. #1
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut creation et communication entre widgets
    bonjour,
    comment faire connaitre un widget dans une fenetre qui se trouve dans une autre fenetre:
    je vous explique autrement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void function1 (GtkWidget *widget, gpointer data)
    {
       GtkWidget * wind1;
       wind1=gtk_window_new(....);
     
    }
    dans une autre fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void function2()
    {
       GtkWidget * wind2;
       wind2=gtk_window_new(....);
        // je veux detruire wind1 mais si j'utilise gtk_destroy(wind1) erreur non conu
     
    }
    merci de m'aider, si je dis des betises je suis un debutant

  2. #2
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut

    De plus c'est logique, je ne sais pas si tu passes ton pointeur à la fonction, mais :
    1 . Si tu ne le passes pas, c'est normale, car la variable n'éxiste pas
    2 . Si tu le passes, il est possible que l'objet que le pointeur pointe est été détruit, ce qui est le cas si fonction2 est appelé après fonction1.
    Omnes Vulnerant Ultima Necat
    Bye

  3. #3
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    bonjour,
    merci pour l'aide, mais j'ai pas bien compris ce que vous avez dis je suis un debutant est ce que tu peux m'expliquer plus et merci

  4. #4
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    C'est simple, un pointeur contient l'adresse d'une variable, quand tu créé un pointeur, il doit pointer sur l'adresse d'une variable, mais supposons qu'il pointe sur l'adresse d'une variable locale, qui n'éxisteras plus après l'appel à cette fonction, le pointeur pointe encore sur l'adresse d'une varaible qui n'éxiste plus, ça cause de gros ennuis.
    Omnes Vulnerant Ultima Necat
    Bye

  5. #5
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    bonjour,
    voila deux remarques:

    la methode que j'ai utilisé est la suivante :

    dans ma fonction de rappel j'ai ecri la fonction de rappel comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void F_Ajouter(GtkWidget *widget, gpointer data, GtkWidget * Fenetre)
         {
             gtk_widget_destroy(Fenetre);
             GtkWidget * F_Ajouter=NULL;
              GtkWidget * Layout=NULL;
              GtkWidget * Label[3];
     
         }
    sachant que la fenetre est la fenetre principale de l'application

    et le signal est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Menu=gtk_menu_new();
               MenuItem=gtk_menu_item_new_with_mnemonic(" _Ajouter ");
               gtk_menu_shell_append(GTK_MENU_SHELL(Menu),MenuItem);
               g_signal_connect(G_OBJECT(MenuItem),"activate",G_CALLBACK(F_Ajouter),(GtkWidget*) F_Acceuil);
    mais toujours ne marche pas.

    la deuxieme façon de faire est la suivante:
    est ce que il est possible de definir une fenetre comme une classe dont les widgets sont des membres avec differentes fonctions

    voila par exemple le code mais il affiche toujours une erreur lors de l'instanciation de la classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    #include <stdlib.h>
    #include <iostream>
    #include <gtk/gtk.h>
     
    class F_Ajouter
          {   
              private :
     
              GtkWidget * windowAjouter; // declaration de la fenetre
              GtkWidget * Layout;   // declaration de layout
              GtkWidget * Frame;
              GtkWidget * Label[3];  // declaration des labels
              GtkWidget * button[2];  // les buttons valider,annuler et effacer
              GtkWidget *  entry[2]; //  declaration des saisies de données
     
              public :
     
            F_Ajouter()
                         {
                                     /****** creation de la fenetre ********/
              windowAjouter=gtk_window_new(GTK_WINDOW_TOPLEVEL);
              gtk_window_set_title(GTK_WINDOW(windowAjouter),"Nouveau Article"); 
              gtk_window_set_default_size(GTK_WINDOW(windowAjouter),500,300);
    	      gtk_window_set_position(GTK_WINDOW(windowAjouter),GTK_WIN_POS_CENTER);
    	      Layout=gtk_layout_new(NULL,NULL);
    	      gtk_container_add(GTK_CONTAINER(windowAjouter), GTK_WIDGET(Layout));
              gtk_window_set_modal(GTK_WINDOW(windowAjouter),TRUE);
     
     
              /*Couleur bleu pale du layout*/
              GdkColor color;
    	      color.pixel = 0;
    	      color.red=60500;
    	      color.green=62001;
    	      color.blue=63504;
              gtk_widget_modify_bg(GTK_WIDGET(Layout), GTK_STATE_NORMAL, &color);
     
    	      // creation, personnalisation et positionnement des labels
     
    	      Label[0]=gtk_label_new("");
    	      Label[1]=gtk_label_new("");
              Label[2]=gtk_label_new("");
              Label[3]=gtk_label_new("");
              gtk_label_set_markup(GTK_LABEL(Label[0]), "<span font_desc=\"Times New Roman italic 20\"foreground=\"#0000FF\"><b><i>Ajouter Article</i></b></span>\n");
              gtk_label_set_markup(GTK_LABEL(Label[1]), "<span font_desc=\"Times New Roman 12\"><u><i>Code Article</i></u></span>\n");
              gtk_label_set_markup(GTK_LABEL(Label[2]), "<span font_desc=\"Times New Roman 12\"><u><i>Prix Article</i></u></span>\n");
              gtk_label_set_markup(GTK_LABEL(Label[3]), "<span font_desc=\"Times New Roman 12\"><u><i>Libelle Article</i></u></span>\n");
    	      gtk_layout_put (GTK_LAYOUT(Layout),Label[0],200,10);
              gtk_layout_put (GTK_LAYOUT(Layout),Label[1],70,100);
              gtk_layout_put (GTK_LAYOUT(Layout),Label[2],70,140);
              gtk_layout_put (GTK_LAYOUT(Layout),Label[3],70,180);
     
              // creation, et positionnement des buttons
     
              button[0]=gtk_button_new_with_label("Valider");
              button[1]=gtk_button_new_with_label(" Effacer ");
              button[2]=gtk_button_new_with_label(" Annuler ");
              gtk_layout_put (GTK_LAYOUT(Layout),button[0],70,240);
              gtk_layout_put (GTK_LAYOUT(Layout),button[1],180,240);
              gtk_layout_put (GTK_LAYOUT(Layout),button[2],290,240); 
              gtk_widget_set_size_request(button[0],80,-1);
              gtk_widget_set_size_request(button[1],80,-1);
              gtk_widget_set_size_request(button[2],80,-1);
              // g_signal_connect(G_OBJECT(button[2]), "destroy-event", G_CALLBACK(gtk_main_quit),NULL);
     
    	      // création & positionnement des zones de de saisies 
     
              entry[0]=gtk_entry_new();
              entry[1]=gtk_entry_new();
              entry[2]=gtk_entry_new();
              gtk_layout_put (GTK_LAYOUT(Layout),entry[0],200,100);
              gtk_layout_put (GTK_LAYOUT(Layout),entry[1],200,140);
              gtk_layout_put (GTK_LAYOUT(Layout),entry[2],200,180);
              gtk_widget_set_size_request(entry[0],80,-1);
              gtk_widget_set_size_request(entry[1],80,-1);
              gtk_widget_set_size_request(entry[2],200,-1);
              gtk_entry_set_max_length(GTK_ENTRY(entry[0]),6);
              gtk_entry_set_max_length(GTK_ENTRY(entry[1]),12);
     
                         }
     
              ~F_Ajouter()
                       {
                         gtk_widget_destroy(windowAjouter);
                       }
              void afficherFAjouter()
               {
                   gtk_widget_show_all(windowAjouter); 
               }    
     
          };
    l'erreur est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     C:\Documents and Settings\pc\Bureau\Article\main.cpp In function `void F_Ajouter(GtkWidget*, void*, GtkWidget*)': 
    134 C:\Documents and Settings\pc\Bureau\Article\main.cpp expected `;' before "fe" 134 C:\Documents and Settings\pc\Bureau\Article\main.cpp statement cannot resolve address of overloaded function 
    135 C:\Documents and Settings\pc\Bureau\Article\main.cpp `fe' undeclared (first use this function) 
      (Each undeclared identifier is reported only once for each function it appears in.) 
    135 C:\Documents and Settings\pc\Bureau\Article\main.cpp `F_Ajouter' is not a type 
     C:\Documents and Settings\pc\Bureau\Article\Makefile.win [Build Error]  [main.o] Error 1

    merci pour l'aide

Discussions similaires

  1. Lecture standard et communication entre processus!
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/07/2003, 16h37
  2. Communication entre processus
    Par markopolo dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/06/2003, 16h21
  3. Réponses: 5
    Dernier message: 25/03/2003, 19h43
  4. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo