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 :

1 fenetre, 2 scrollbar, probleme :(


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Par défaut 1 fenetre, 2 scrollbar, probleme :(
    Bonjour tlm,
    dans le cadre d'un projet devant s'approcher d'un chat type MSN, je voudrais avoir une fenetre avec :

    -1 label avec scrollbar, ou le texte arrive
    -1 textview avec scrollbar pour le texte à envoyer
    -1 bouton envoyer

    Je tourne en rond depuis plusieurs jours, sans réussir à régler le prob des scrollbar. Voilà une version light, mais qui m'affiche mon label entre 2 scrollbars, et ou rien n'est scrollé. Je ne comprends vraiment pas ou est le problème

    Pourriez-vous me dire ce qui ne convient pas SVP ?

    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    #include <stdlib.h>
    #include <gtk/gtk.h>
    #include "include.h"
    #include <pthread.h>
    #include <stdio.h>
     
    static char received[250];
    static GtkWidget *pLabel;
    static reply message;
    static char pseudo[20];
    static GtkWidget *pWindow;
    static gchar* sUtf8;
     
     
     
     
     
    void redraw(GtkWidget * widget)
    {
        gtk_widget_queue_draw(GTK_WIDGET(widget));
    }
     
    void writing (char *pseudo_sender, char *msg_sender)
    {
    	strcat(received,pseudo_sender);
    	strcat(received," : ");
    	strcat(received,msg_sender);
    	strcat(received,"\n");
    	sUtf8 = g_locale_to_utf8(received, -1, NULL, NULL, NULL);
    // 	gtk_label_set_label(pLabel,sUtf8);
    	g_free(sUtf8);
    }
     
    void Sending (GtkWidget *pWidget, gpointer *data)
    {
     
    	GtkWidget *pDialog;
    	GtkWidget *pTextView;
    	GtkTextBuffer* pTextBuffer;
    	GtkTextIter iStart;
    	GtkTextIter iEnd;
    	gchar* sBuffer;
    	pthread_t thread2;
     
     
    	pTextView = GTK_WIDGET(data);
     
    	pTextBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(pTextView));
    	gtk_text_buffer_get_start_iter(pTextBuffer, &iStart);
    	gtk_text_buffer_get_end_iter(pTextBuffer, &iEnd);
    	sBuffer = gtk_text_buffer_get_text(pTextBuffer, &iStart, &iEnd, TRUE);
     
    	strcpy(message.pseudo,pseudo);
    	strcpy(message.msg,sBuffer);
     
    		if (pthread_create(&thread2, NULL, client, &message))
    			fprintf(stderr, "error creating a new thread (client) \n");
     
    	strcat(received,message.pseudo);
    	strcat(received," : ");
    	strcat(received,sBuffer);
    	strcat(received,"\n");
    	sUtf8 = g_locale_to_utf8(received, -1, NULL, NULL, NULL);
    // 	gtk_label_set_label(pLabel,sUtf8);
     
    	g_free(sUtf8);
    	g_free(sBuffer);
    	pthread_detach(thread2);
     
    }
     
    int main(int argc, char* argv[])
    {
     
    // Partie chat normal
     
    	pthread_t thread1;
    	int i;
    	char txt[250];	
     
    	if(argc!=2){
    		printf("Usage: %s <nickname>\n", argv[0]);
    		return(-1);
    	}
     
    	strcpy(pseudo,argv[1]);
     
    	if (pthread_create(&thread1, NULL, server, NULL/*(void *)(buf)*/)) {
    		fprintf(stderr, "error creating a new thread (server) \n");
    	   return (-1);
     	}
     
     
    // Partie GTK
     
    	GtkWidget* pBox;
    	GtkWidget* pBox1;
    	GtkWidget* pBox2;
    	GtkWidget* pTextView;
    	GtkWidget* pButton;
    	GtkWidget *scrollbar;
    	GtkWidget *scrollbar2;
    	GtkWidget* pWindow;
    	GtkWidget* hbuttonbox;
     
    	gtk_init(&argc, &argv);
     
    	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200);
    	gtk_window_set_title(GTK_WINDOW(pWindow), "OBMSN");
    	g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
     
     
    	pBox = gtk_vbox_new(FALSE, 5);
    	pBox1 = gtk_vbox_new(FALSE, 5);
    	pBox2 = gtk_vbox_new(FALSE, 5);
     
    	gtk_container_add(GTK_CONTAINER(pWindow),pBox);
     
    	scrollbar = gtk_scrolled_window_new(NULL, NULL);
    	scrollbar2 = gtk_scrolled_window_new(NULL, NULL);
     
     	gtk_box_pack_start(GTK_BOX(pBox), pBox1, TRUE, TRUE, 5);
     	gtk_box_pack_start(GTK_BOX(pBox), pBox2, TRUE, TRUE, 5);
     
    	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrollbar),pBox1);
    	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrollbar2),pBox2);
    	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
    	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar2), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
     
     
    	sUtf8 = g_locale_to_utf8(received, -1, NULL, NULL, NULL);
      	pLabel = gtk_label_new(sUtf8);
    	g_free(sUtf8);
     
     
            gtk_label_set_text(GTK_LABEL(pLabel), received);
    	gtk_box_pack_start(GTK_BOX(pBox1),pLabel,FALSE,FALSE,5);	
     
     
    	pTextView = gtk_text_view_new();
    	gtk_container_add(GTK_CONTAINER(pBox2),pTextView);
     
     
     
    	pButton=gtk_button_new_with_label("Send");
      	hbuttonbox = gtk_hbutton_box_new();
    	gtk_box_pack_start(GTK_BOX(hbuttonbox),pButton,FALSE,FALSE,0);
      	gtk_container_add(GTK_CONTAINER (pBox), hbuttonbox);
    	g_signal_connect(G_OBJECT(pButton), "clicked", G_CALLBACK(Sending), (gpointer) pTextView);
     
     
    	gtk_widget_show_all(pWindow);
     
     
    	gtk_main();
     
    	return EXIT_SUCCESS;
     
    	pthread_detach(thread1);
    	pthread_exit(NULL);
    	return 0;
     
     
    }

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Citation Envoyé par Bourreau
    Voilà une version light,
    Un peu trop light, ça aurait été bien qu'il soit compilable

    Sans regarder le code, je ne pense pas qu'un label soit une bonne solution pour afficher un long texte sur plusieurs ligne. Pourquoi ne pas utiliser un GtkTextView qui ne rend non éditable ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Par défaut
    J'ai édité le premier reply, tout le code du fichier main est la. Tu penses que je devrais remplacer le label par un textview ? Je ne connais pas grand chose au gtk, je débute

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 7
    Par défaut
    Tjs bloqué de la meme manière, personne n'a d'idée ?


    edit : j'ai compris que mon prob est le fait que mes child ont déja des parents. Je donne d'abord comme parent ma pBox et ensuite mes scrollbars. Par contre je ne vois pas comment y échapper :/

Discussions similaires

  1. [Scrollbar] Probleme d'affichage avec IE
    Par Esil2008 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 01/08/2008, 15h27
  2. [ScrollBar] Probleme avec le scrollbar et le focus / roulette
    Par alavoler dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/04/2008, 01h00
  3. [FLASH MX] Probleme de scrollbar et texte dynamique
    Par Bisûnûrs dans le forum Flash
    Réponses: 6
    Dernier message: 28/06/2004, 21h12
  4. [C#] Probleme de dimensionnement des fenetres en MDI
    Par stephdiplo150 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/05/2004, 19h05
  5. [langage] fonction sleep + probleme fenetre dos
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2003, 19h46

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