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 :

Menu et scrollbar


Sujet :

GTK+ avec C & C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Par défaut Menu et scrollbar
    Bonjour à tous,
    je suis en train de développer une application dans le cadre d'un projet, et je tombe sur un petit problème.

    Pour le moment, mon application est sommairement composée d'un menu, et d'une hbox, qui sont toutes les deux mises dans une vbox.
    Jusque là, pas de problème, mais je veux maintenant pouvoir ajouter une scrollbar à mon hbox ... et là j'ai un problème ...

    En fait, je n'arrive mettre la scrollbar qu'à la première box qui contient les autres (la vbox), et donc lorsque je scrolle, le menu part avec ! Ce qui n'est pas pour me plaire bien sûr ...

    Voici le code que j'utilise pour le moment, et qui scrolle toute la page :

    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
     
    Application* newApplication()
    {
        // Déclaration des variables
        Application* app = NULL;
        GtkWidget* boxVerticale = NULL;
        GtkWidget* boxPrincipale = NULL;
        GtkWidget* scrollbar;
     
        app = (Application*) malloc(sizeof(Application));
        if(!app)
        {
            fprintf(stderr, "Erreur : Impossible d’allouer la mémoire pour l’application.");
            exit(EXIT_FAILURE);
        }
     
        app->m_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(app->m_window), "Projet C - Sujet 3");
        gtk_window_set_position(GTK_WINDOW(app->m_window), GTK_WIN_POS_CENTER);
        gtk_window_set_default_size(GTK_WINDOW(app->m_window), 800, 600);
        gtk_window_set_resizable (GTK_WINDOW(app->m_window), TRUE);
     
        app->m_projet = newProjet();
     
        scrollbar = gtk_scrolled_window_new(NULL, NULL);
        gtk_container_add(GTK_CONTAINER(app->m_window),scrollbar);
     
        // Box verticale
        boxVerticale = gtk_vbox_new(FALSE, 0);
        gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrollbar), boxVerticale);
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollbar), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
     
        // Création du menu
        app->m_menuBar = newMenuBar(app);
        gtk_box_pack_start(GTK_BOX(boxVerticale), app->m_menuBar->m_bar, FALSE, FALSE, 0);
     
        // Box principale
        boxPrincipale = gtk_hbox_new(FALSE, 0);
        gtk_container_add(GTK_CONTAINER(boxVerticale), boxPrincipale);
     
        // Affectation de la box où s’affiche le projet
        setProjetBox(app->m_projet, GTK_BOX(boxPrincipale));
     
        // Génération et actualisation du widget correspondant au projet
        generateProjetWidget(app->m_projet);
     
        // Connexion entre l’événement "quit" et la destruction de la fenêtre
        g_signal_connect(G_OBJECT(app->m_window), "destroy", G_CALLBACK(cb_quit), app);
     
        // Demande d’affichage
    	gtk_widget_show_all(app->m_window);
     
        return app;
    }
    Je vous remercie d'avance pour vos réponses

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Par défaut
    Bonjour,

    en fait tu mets ta barre de menu dans ta box, et ta box dans ta scrolled window. Comme tout ce qui est dans la scrolled window bouge quand tu scrolles, la solution et d'avoir d'abord une box dans ta fenêtre principale. A l'intérieur, tu ajoutes ton menu, et ta scrolled window. Et dans ta scrolled window, tu mets soit ton widget scrollable, soit ou une box qui contient les widgets scrollables.

    Tu peux aussi t'orienter vers glade, qui permet de construire graphiquement ses interfaces graphiques.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 2
    Par défaut
    Merci beaucoup, j'ai réussi à faire ce que je voulais ... je pensais qu'on ne pouvait appliquer la fonction qu'à une fenêtre, mais non !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/06/2010, 14h33
  2. Supprimer les scrollbars et menu contextuel (CHtmlView)
    Par Acedia dans le forum VC++ .NET
    Réponses: 0
    Dernier message: 09/01/2008, 14h20
  3. menu qui suit la scrollbar
    Par Mangacker dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/05/2007, 07h51
  4. Menu dynamique et scrollbar
    Par tenderstoune dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 06/04/2007, 11h14
  5. Réponses: 1
    Dernier message: 04/08/2006, 17h31

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