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 :

Utiliser des saisies


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut Utiliser des saisies
    Bonjour à tous ! Je suis débutant en C et j'ai un petit problème avec GTK...
    Je ne comprends pas comment réexploiter des données saisies par l'utilisateur dans des formulaires.
    Mon but est d'envoyer un mail à un utilisateur (smtp et tout le blabla). Pour le moment j'arrive à m'envoyer des mails. Mais je dois préciser dans le code source le destinataire, le message etc... Donc ce n'est pas dynamique.
    Je suis arrivé à faire de facon dynamique l'envoit du message. Mais je dois toujours préciser dans mon code le destinataire et celui qui envoit le message.

    Car je n'arrive pas à réexploitez c'que l'utilisateur a écrit dans le champs "TO:" je n'arrive que dans le message.

    (Je ne sais pas si je suis très claire T_T)

    Voila un morceau de monde code source !
    (je suis nul en anglais donc je pense que j'ai du mal traduire mes coms... Mais comme je dois le faire en anglais... Ben...)

    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
     
    void  NewMail()
    {
       GtkWidget *NewMailWindow = NULL; /* New Mail Window */
       GtkWidget *pVBox = NULL; /* Vertical Box */
       GtkWidget *pHBox = NULL;
       GtkWidget* pTextView = NULL;
       GtkWidget* pButton = NULL;
     
       GtkWidget *pEntry = NULL;
       GtkWidget *pLabel = NULL;
     
       NewMailWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // to create a complete window not a pop up window !
       gtk_window_set_title ( GTK_WINDOW(NewMailWindow), "New Mail"); // Title of the main Window
       gtk_window_set_default_size(GTK_WINDOW(NewMailWindow),800,600); // Size of the mail Window
       gtk_window_set_position(GTK_WINDOW(NewMailWindow),GTK_WIN_POS_CENTER); // Default position of the mail window
     
     
       	pVBox = gtk_vbox_new(FALSE, 5);
    	gtk_container_add(GTK_CONTAINER(NewMailWindow), pVBox);
     
        /*** To , Cc: , Cci and Object ***/
     
     
        /* Creation et insertion des elements contenus dans le premier GtkFrame */
        pLabel = gtk_label_new("To :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
        pLabel = gtk_label_new("Cc :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
        pLabel = gtk_label_new("Cci :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
        pLabel = gtk_label_new("Object :");
        gtk_box_pack_start(GTK_BOX(pVBox), pLabel, FALSE, FALSE, 0);
        pEntry = gtk_entry_new();
        gtk_box_pack_start(GTK_BOX(pVBox), pEntry, FALSE, FALSE, 0);
     
     
        /*** Where the user write his mail***/
    	pEntry = gtk_text_view_new();
    	gtk_box_pack_start(GTK_BOX(pVBox), pEntry, TRUE, TRUE, 0);
     
        /*** To send his mail ***/
    	pButton=gtk_button_new_with_label("Envoyer");
        gtk_box_pack_start(GTK_BOX(pVBox),pButton,FALSE,FALSE,0);
        g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) pEntry);
     
    	gtk_widget_show_all(NewMailWindow); /* display all the mail box */
     
    	return EXIT_SUCCESS;
    }
    La fonction qui crée un fichier texte, execute l'envoit du mail (un autre.exe) qui prend en compte le fichier txt crée et après l'envoi du mail elle efface le fichier texte. (elle exploite le champ texte de mon mail mais je ne sais pas comment exploitez le champ to)

    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
     
    /*** Send a mail ***/
    void SendMail(GtkWidget *pWidget, gpointer *data)
    {
    	GtkWidget *pEntry;
    	GtkTextBuffer* pTextBuffer;
    	GtkTextIter iStart;
    	GtkTextIter iEnd;
    	gchar* sBuffer;
     
    	pEntry = GTK_WIDGET(data);
     
    	/* On recupere le buffer */
    	pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pEntry));
    	/* On recupere l'origine du buffer */
    	gtk_text_buffer_get_start_iter(pTextBuffer, &iStart);
    	/* On recupere la fin du buffer */
    	gtk_text_buffer_get_end_iter(pTextBuffer, &iEnd);
     
    	/* On copie le contenu du buffer dans une variable */
    	sBuffer = gtk_text_buffer_get_text(pTextBuffer, &iStart, &iEnd, TRUE);
     
     
        FILE* file = NULL;
     
        file = fopen("mail.txt", "w+");
        fprintf(file, "mail.blabla.com\n\n"
              "blabla@blabla.com\n"
              "blabla@blabla.com\n"
              "From: \"Ajite\" <blabla@blabla.com>\n"
              "To: \"blabla\" <blabla@blabla.com>\n"
              "Subject: Test smtp\n\n"
              "%s %s  ", sBuffer,sBuffer);
        fclose(file);
        system("mail.exe mail.txt");
        remove("mail.txt");
        return 0;
    }
    ps: je comprends pas tout c'que je fais mais comme cela marche T_T... Enfin presque...

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut et bienvenue sur les forums de developpez.com


    Il faut que tu déclares un pointeur par zone de saisie car vu qu'il faut que tu récupères le contenu de tes champs, il te faut garder une référence sur chacun de ces widgets ! J'ai vu que dans ton cas, tu possèdes qu'un seul pointeur (pEntry) pour "toutes" tes zones de saisies, ce qui n'est pas très pratique, une manipulation est possible mais c'est une pure perte de temps !

    Pour récupérer le texte contenu dans un GtkEntry, il faut utiliser la fonction gtk_entry_get_text
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Merci Frank.H de m'aider !

    J'ai fais comme tu m'as dis j'ai crée deux nouveaux pointeurs pour les champs to et message. J'ai donc tenté d'envoyer un mail avec ces deux valeurs (mais le champs to me renvoit la valeur "NULL". Je pense donc que c'est à cause de cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) pMainMessage);
    Qui envoit juste mon pointeur MainMessage et pas mon pointeurs pTo. Je ne sais pas comment le rajouter si je remets une ',' il va y avoir un argument de trop !

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Met alors tes widgets dans une structure, structure dont tu passes alors l'adresse à la place de ton MainMessage !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    (rapelle je suis débutant T_T)
    Merci Frank, mais je suis vraiment désolé mais je ne vois pas c'que tu veux dire par

    Citation Envoyé par Frank.H
    tu passes alors l'adresse à la place de ton MainMessage !
    Structure j'l'ai vu rapidement en cours T_T donc si mes souvenirs sont exactes

    Je fais une structure que je nomme Test par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct test
    {
        GtkWidget *pTo;
        GtkWidget *pMainMessage;
    };
    Donc je mets mes deux pointeurs dedans.

    Après je vais garder mon pEntry et je vais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    struct Test pEntry
    pEntry.pTo = gtk_entry_new();
    gtk_box_pack_start(GTK_BOX(pVBox), pEntry.pTo, FALSE, FALSE, 0);
    Je fais la même pour le pMainMessage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pEntry.pMainMessage = gtk_text_view_new();
    gtk_box_pack_start(GTK_BOX(pVBox), pEntry.pMainMessage, TRUE, TRUE, 0);
    et donc si je ne me suis pas trompé (mais la j'y crois pas une seconde T_T) je dois envoyer l'adresse avec l'esperluette... Mais je mets quoi dedans T_T alors...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) pMainMessage

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Tu y est presque, c'est bien ca Pour l'enregistrement de ton callback en passant l'adresse de ta structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(SendMail), (gpointer) & pEntry);
    Pour ta structure on peut faire mieux, en faisant un typedef dessus soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    {
        GtkWidget *pTo;
        GtkWidget *pMainMessage;
    }
    test;
    La déclaration suivante
    est donc à remplacer par:
    Dans ton callback tu récupère alors un pointeur sur la structure que tu as passée en argument:
    Je te suggère par ailleurs de choisir mieux le nom de ta structure car test n'est pas très évocateur

    Voilà
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Merci beaucoup de prendre le temps de me répondre !
    Oui pour la structure mais comme je faisais un test

    Sinon j'ai essayé de plein de façon pour exploiter mes données pour le moment je vais juste utiliser le pointeur MainMessage si je trouve pour celle la je trouverai forcément pour l'autre ^^'

    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
    void SendMail(GtkWidget *pWidget, gpointer *data)
    {
    	GtkWidget *pEntry;
    	GtkTextBuffer* pTextBuffer;
    	GtkTextIter iStart;
    	GtkTextIter iEnd;
    	gchar* sBuffer;
     
    	/* On recupere le buffer */
    	pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pEntry));
    	/* On recupere l'origine du buffer */
    	gtk_text_buffer_get_start_iter(pTextBuffer, &iStart);
    	/* On recupere la fin du buffer */
    	gtk_text_buffer_get_end_iter(pTextBuffer, &iEnd);
     
    	/* On copie le contenu du buffer dans une variable */
    	sBuffer = gtk_text_buffer_get_text(pTextBuffer, &iStart, &iEnd, TRUE);
     
     
        FILE* file = NULL;
     
        file = fopen("mail.txt", "w+");
        fprintf(file, "mail.blabla.com\n\n"
              "blabla@blabla.com\n"
              "blabla@blabla.com\n"
              "From: \"Ajite\" <blabla@blabla.com>\n"
              "To: \"blabla\" <blabla@blabla.com>\n"
              "Subject: Test smtp\n\n"
              "%s ", sBuffer);
        fclose(file);
        system("mail.exe mail.txt");
        remove("mail.txt");
        return 0;
    }
    Donc si je veux que cela fonctionne je dois utiliser mes données, ici pour la fonction data mais cela ne fonctionne pas si je fais par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pEntry = data.pMainMessage;
    Cela ne va pas marcher ... Enfin cela n'a pas marcher
    Je me suis dis "Tu es bêtes ou quoi ? Tu n'as pas rapellé la fonction T_T" (oui je me parle à moi même T_T)
    Et... J'ai donc pensé que si je la rapellé je ne saurai pas l'utiliser parceque je n'aurai pas les données que j'avais tout à l'heure? (Vous me suivez toujours ?)

    Donc comment je fais pour réutiliser la donnée que j'avais mise en haut dans le pointeur de cette fonction pEntry.pMainMessage ?

    Désolé si ma question est stupide T_T...

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Nan !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pEntry = data.pMainMessage;
    Ceci n'est pas possible car tout bêtement, data étant de type gpointer (ou void*), celui-ci n'est pas déréférencable donc tu dois passer par un pointeur d'abord vers ta structure comme je te l'ai montré !
    et pour travailler avec les pointeurs membres:
    Il faut en effet utiliser l'opérateur -> vu qu'ici on travail par le biais des pointeurs donc par exemple si pTo est un GtkEntry on pourrais récupérer son contenu comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gchar * sTo = gtk_entry_get_text (GTK_ENTRY (ma_struct->pTo));

    Voilà
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Hum déso si je suis un boulet T_T mais j'ai fais comme tu me l'as dis. Enfin comme je l'ai compris (depuis ta réponse je cherche T_T)

    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
    void SendMail(GtkWidget *pWidget, gpointer *data)
    {
        test *ma_struct = data;
        GtkTextBuffer* pTextBuffer;
        GtkTextIter iStart;
        GtkTextIter iEnd;
        gchar* sTo = gtk_entry_get_text(GTK_ENTRY(ma_struct->pTo));
        FILE* file = NULL;
     
        file = fopen("mail.txt", "w+");
        fprintf(file, "mail.supinfo.com\n\n"
              "blabla@blabla.com\n"
              "blabla@blabla.com\n"
              "From: \"Ajite\" <blabla@blabla.com>\n"
              "To: \"blabla\" <blabla@blabla.com>\n"
              "Subject: Test smtp\n\n"
              "%s", sTo);
        fclose(file);
        system("mail.exe mail.txt");
        remove("mail.txt");
        return 0;
    }
    J'utilise que le champs pTo que j'envoi dans le message ^^ (voir si il est pas nul)

    Donc je dis bien que *ma_struct = data et donc je réutilise c'que tu m'as donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gchar* sTo = gtk_entry_get_text(GTK_ENTRY(ma_struct->pTo));
    Et

    je l'affiche ensuite

    Sauf que me renvoit toujours une valeur null et a l'air de planter le programme après l'envoit du mail (alors qu'avant il planté pas ^^)

    Merci d'avance :/

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Normal


    Le prototype de ton callback est faux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SendMail(GtkWidget *pWidget, gpointer *data)
    Ici tu déclare un argument de type (en réalité) void ** ce qui ne doit pas être le cas donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void SendMail(GtkWidget *pWidget, gpointer data)
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Enfaite j'avais déjà retirer le * et cela ne fonctionné pas. Je viens de le refaire (au cas ou ^^') cela me fais le même problème... Et me renvoit la valeur "NULL" :/

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Ajite
    Enfaite j'avais déjà retirer le * et cela ne fonctionné pas. Je viens de le refaire (au cas ou ^^') cela me fais le même problème... Et me renvoit la valeur "NULL" :/
    Hé bien il ne te restes plus qu'à me fournir ton projet entier, fait un zip s'il contient plusieurs fichiers et met-le en pièce jointe dans ton prochain message
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Voila merci beaucoup en espérant que cela ne te dérange pas trop. (c'le début d'un projet pour l'école ^^' y a pas encore grand chose je débute :/)

    Merci beaucoup en tout cas !
    Fichiers attachés Fichiers attachés

  14. #14
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Dans ta fonction NewMail, inutile de faire un
    car ta fonction ne renvoie pas de résultat !

    Il faut déclarer un pointeur constant pour récupérer le contenu d'un GtkEntry soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    const gchar * sTo = gtk_entry_get_text (GTK_ENTRY (ma_struct->pTo));
    et chez moi le warning disparaît !

    Pourquoi t'obstiner à vouloir faire retourner une valeur par une fonction qui n'en renvoie pas ? Ta fonction SendMail, tu vires également le
    Attention dans ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(NewMail), (GtkWidget*) pWindow);
    Ici ta fonction NewMail n'as pas le bon prototype:
    Il faut qu'il soit ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void NewMail (GtkMenuItem * menuitem, gpointer data)
    Il faut toujours respecter les signature des callback sinon gars aux ennuis !

    Attention à toujours vérifier que le fichier a bien été ouvert/créé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        FILE * file = fopen("mail.txt", "w+");
     
        if (file != NULL)
        {
            /* Ecriture du fichier ici. */
        }
    Nous y voilà, dans ta fonction NewMail, tu déclare une variable de type test soit:
    mais il ne faut pas qu'elle soit locale à la fonction car ta fonction une fois finie ne contient plus de référence vers ta structure, il faut alors soit la déclarer en globale dans ton fichier source newMail.c (chose jamais très recommandée) ou bien allouer un espace par le biais d'un pointeur puis effacer cette structure une fois la fermeture de ta fenêtre !

    Pour tes tests, met là en globale mais change très vite en faisant quelque chose de plus costaud comme il allocation dynamique par exemple. Tu pourrais par exemple créer une structure qui contient tous les widgets dont tu as besoin puis dans ta fonction allouer un pointeur sur cette structure que tu libère ensuite lors de la fermeture de la fenêtre newMail !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 40
    Par défaut
    Alors merci beaucoup cela fonctionne !!!!!!

    J'ai corrigé tous c'que tu m'as dis... Je ne savais pas pour le return ^^' en même temps en cours on a fait:

    Printf, scanf et directe interface graphique ^^'...

    Et la on nous demande de faire ce projet donc j'étais un peu perdu !!!

  16. #16
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Ajite
    Alors merci beaucoup cela fonctionne !!!!!!

    J'ai corrigé tous c'que tu m'as dis... Je ne savais pas pour le return ^^' en même temps en cours on a fait:

    Printf, scanf et directe interface graphique ^^'...

    Et la on nous demande de faire ce projet donc j'étais un peu perdu !!!
    Oui c'est ca le problème avec des profs pressés et dans pas mal de cas qui ont eux même du mal avec le C ! Le C est un art, un art qui doit s'apprendre correctement et pas à la va vite !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Utiliser des données saisies comme nom d'objet
    Par Tchebichef dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/09/2014, 22h53
  2. Réponses: 3
    Dernier message: 10/09/2013, 12h27
  3. Réponses: 0
    Dernier message: 11/10/2010, 11h27
  4. Réponses: 1
    Dernier message: 12/12/2007, 10h35
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

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