Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
CREATION D'UN MENU AVEC GTK
Information sur la source
Description
Ce code vous permet de cree un menu contextuel simple
Source
- #include <gtk/gtk.h>
-
- static gint button_press (GtkWidget *, GdkEvent *);
- static void menuitem_response (GtkWidget *, gchar *);
-
-
- int main (int argc, char *argv[])
- {
-
- GtkWidget *window;
- GtkWidget *menu;
- GtkWidget *menu_bar;
- GtkWidget *root_menu;
- GtkWidget *menu_items;
- GtkWidget *vbox;
- GtkWidget *button;
- char buf[128];
- int i;
-
- gtk_init (&argc, &argv);
-
- /* Création d'un fenêtre */
-
- window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_window_set_title(GTK_WINDOW (window), "Test de Menu GTK");
- gtk_signal_connect(GTK_OBJECT (window), "delete_event",
- (GtkSignalFunc) gtk_exit, NULL);
-
- /* Initialise le widget menu -- Attention : n'appelez jamais
- * gtk_show_widget() pour le widget menu !!!
- * C'est le menu qui contient les items de menu, celui qui surgira
- * lorsque vous cliquez sur le « menu racine » de l'application. */
-
- menu = gtk_menu_new();
-
- /* Voici le menu racine dont le label sera le nom du menu affiché sur la barre
- * de menu. Il n'a pas de gestionnaire de signal attaché car il ne fait
- * qu'afficher le reste du menu lorsqu'il est pressé. */
-
- root_menu = gtk_menu_item_new_with_label("Menu racine");
-
- gtk_widget_show(root_menu);
-
- /* Puis, on crée une petite boucle créant trois entrées pour « menu test »
- * Notez l'appel à gtk_menu_append(). Ici, on ajoute une liste d'items à
- * notre menu. Normalement, on devrait aussi capturer le signal "clicked"
- * pour chacun des items et configurer une fonction de rappel pour lui,
- * mais on l'a omis ici pour gagner de la place. */
-
- for(i = 0; i < 3; i++)
- {
- /* Copie des noms dans buf. */
-
- sprintf(buf, "Sous-menu Test - %d", i);
-
- /* Création d'un nouveau item de menu avec un nom... */
-
- menu_items = gtk_menu_item_new_with_label(buf);
-
- /* ...et ajout de celui-ci dans le menu. */
-
- gtk_menu_append(GTK_MENU (menu), menu_items);
-
- /* On fait quelque chose d'intéressant lorsque l'item est
- * sélectionné. */
-
- gtk_signal_connect (GTK_OBJECT(menu_items), "activate",
- GTK_SIGNAL_FUNC(menuitem_response), (gpointer)
- g_strdup(buf));
-
- /* Affichage du widget. */
-
- gtk_widget_show(menu_items);
- }
-
- /* Maintenant, on spécifié que nous voulons que notre nouveau « menu »
- * soit le menu du « menu racine ». */
-
- gtk_menu_item_set_submenu(GTK_MENU_ITEM (root_menu), menu);
-
- /* Création d'une vbox pour y mettre un menu et un bouton. */
-
- vbox = gtk_vbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER(window), vbox);
- gtk_widget_show(vbox);
-
- /* Création d'une barre de menus pour contenir les menus. Puis, on
- * l'ajoute à notre fenêtre principale. */
-
- menu_bar = gtk_menu_bar_new();
- gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 2);
- gtk_widget_show(menu_bar);
-
- /* Création d'un bouton pour y attacher le menu. */
-
- button = gtk_button_new_with_label("Pressez moi");
- gtk_signal_connect_object(GTK_OBJECT(button), "event",
- GTK_SIGNAL_FUNC (button_press), GTK_OBJECT(menu));
- gtk_box_pack_end(GTK_BOX(vbox), button, TRUE, TRUE, 2);
- gtk_widget_show(button);
-
- /* Finalement, on ajoute l'item de menu à la barre de menu --
- * c'est l'item de menu racine sur lequel je me suis déchaîné ;-) */
-
- gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), root_menu);
-
- /* Affichage de la fenêtre. */
-
- gtk_widget_show(window);
-
- gtk_main ();
-
- return 0;
- }
-
-
-
- /* On répond à un appui sur le bouton en postant un nouveau menu passé comme
- * un widget.
- *
- * On remarque que le paramètre "widget" est le menu à poster, PAS le bouton
- * qui a été pressé. */
-
-
- static gint button_press (GtkWidget *widget, GdkEvent *event)
- {
-
- if (event->type == GDK_BUTTON_PRESS) {
- GdkEventButton *bevent = (GdkEventButton *) event;
- gtk_menu_popup (GTK_MENU(widget), NULL, NULL, NULL, NULL,
- bevent->button, bevent->time);
-
- /* On indique à l'appelant que l'on a géré cet événement. */
-
- return TRUE;
- }
-
- /* On indique à l'appelant que l'on n'a pas géré cet événement. */
-
- return FALSE;
- }
-
-
- /* Affiche une chaîne lorsqu'un item de menu est choisi. */
-
- static void menuitem_response (GtkWidget *widget, gchar *string)
- {
- printf("%s\n", string);
- }
-
#include <gtk/gtk.h>
static gint button_press (GtkWidget *, GdkEvent *);
static void menuitem_response (GtkWidget *, gchar *);
int main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *menu;
GtkWidget *menu_bar;
GtkWidget *root_menu;
GtkWidget *menu_items;
GtkWidget *vbox;
GtkWidget *button;
char buf[128];
int i;
gtk_init (&argc, &argv);
/* Création d'un fenêtre */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW (window), "Test de Menu GTK");
gtk_signal_connect(GTK_OBJECT (window), "delete_event",
(GtkSignalFunc) gtk_exit, NULL);
/* Initialise le widget menu -- Attention : n'appelez jamais
* gtk_show_widget() pour le widget menu !!!
* C'est le menu qui contient les items de menu, celui qui surgira
* lorsque vous cliquez sur le « menu racine » de l'application. */
menu = gtk_menu_new();
/* Voici le menu racine dont le label sera le nom du menu affiché sur la barre
* de menu. Il n'a pas de gestionnaire de signal attaché car il ne fait
* qu'afficher le reste du menu lorsqu'il est pressé. */
root_menu = gtk_menu_item_new_with_label("Menu racine");
gtk_widget_show(root_menu);
/* Puis, on crée une petite boucle créant trois entrées pour « menu test »
* Notez l'appel à gtk_menu_append(). Ici, on ajoute une liste d'items à
* notre menu. Normalement, on devrait aussi capturer le signal "clicked"
* pour chacun des items et configurer une fonction de rappel pour lui,
* mais on l'a omis ici pour gagner de la place. */
for(i = 0; i < 3; i++)
{
/* Copie des noms dans buf. */
sprintf(buf, "Sous-menu Test - %d", i);
/* Création d'un nouveau item de menu avec un nom... */
menu_items = gtk_menu_item_new_with_label(buf);
/* ...et ajout de celui-ci dans le menu. */
gtk_menu_append(GTK_MENU (menu), menu_items);
/* On fait quelque chose d'intéressant lorsque l'item est
* sélectionné. */
gtk_signal_connect (GTK_OBJECT(menu_items), "activate",
GTK_SIGNAL_FUNC(menuitem_response), (gpointer)
g_strdup(buf));
/* Affichage du widget. */
gtk_widget_show(menu_items);
}
/* Maintenant, on spécifié que nous voulons que notre nouveau « menu »
* soit le menu du « menu racine ». */
gtk_menu_item_set_submenu(GTK_MENU_ITEM (root_menu), menu);
/* Création d'une vbox pour y mettre un menu et un bouton. */
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
/* Création d'une barre de menus pour contenir les menus. Puis, on
* l'ajoute à notre fenêtre principale. */
menu_bar = gtk_menu_bar_new();
gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 2);
gtk_widget_show(menu_bar);
/* Création d'un bouton pour y attacher le menu. */
button = gtk_button_new_with_label("Pressez moi");
gtk_signal_connect_object(GTK_OBJECT(button), "event",
GTK_SIGNAL_FUNC (button_press), GTK_OBJECT(menu));
gtk_box_pack_end(GTK_BOX(vbox), button, TRUE, TRUE, 2);
gtk_widget_show(button);
/* Finalement, on ajoute l'item de menu à la barre de menu --
* c'est l'item de menu racine sur lequel je me suis déchaîné ;-) */
gtk_menu_bar_append(GTK_MENU_BAR (menu_bar), root_menu);
/* Affichage de la fenêtre. */
gtk_widget_show(window);
gtk_main ();
return 0;
}
/* On répond à un appui sur le bouton en postant un nouveau menu passé comme
* un widget.
*
* On remarque que le paramètre "widget" est le menu à poster, PAS le bouton
* qui a été pressé. */
static gint button_press (GtkWidget *widget, GdkEvent *event)
{
if (event->type == GDK_BUTTON_PRESS) {
GdkEventButton *bevent = (GdkEventButton *) event;
gtk_menu_popup (GTK_MENU(widget), NULL, NULL, NULL, NULL,
bevent->button, bevent->time);
/* On indique à l'appelant que l'on a géré cet événement. */
return TRUE;
}
/* On indique à l'appelant que l'on n'a pas géré cet événement. */
return FALSE;
}
/* Affiche une chaîne lorsqu'un item de menu est choisi. */
static void menuitem_response (GtkWidget *widget, gchar *string)
{
printf("%s\n", string);
}
Sources de la même categorie
Commentaires
|
CalendriCode
| | | L | M | M | J | V | S | D |
| | | | | 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 |
|
|