Accueil > > > [GTK+] FENÊTRE POPUP ANIMÉE EN BAS À DROITE DE L' ÉCRAN
[GTK+] FENÊTRE POPUP ANIMÉE EN BAS À DROITE DE L' ÉCRAN
Information sur la source
Description
Bonjour,
Voici une fenêtre popup animée sans bordure, qui apparait progressivement en bas à droite de l' écran.
Idéal pour des popups du genre "Vous avez quarante-douze nouveaux messages".
GTK+ permet non seulement une excellente portabilité du code, mais il induit une autre approche de la programmation GUI, plus simple que la programmation win32 classique. Le code est simple, court, et facilement lisible.
Le principe de la fenêtre popup repose sur une fonction appelée par le main().
Cette fonction crée la fenêtre et la faire apparaître.
La fenêtre est déplacée avec la méthode gtk_window_move à intervalle régulier grâce à la fonction g_timeout_add() qui exécute une fonction à intervalle régulier.
Cliquer sur le bouton pour la faire redescendre.
Source
- #include <gtk/gtk.h>
-
- gint x, y, departY, destY;
- guchar intervalle=1;
- GtkWidget *fen;
-
- void cbx_popup_new(gchar *caption, guchar vitesse);
-
- int main( int argc, char **argv )
- {
- gtk_init (&argc, &argv);
- cbx_popup_new (
- "<span face=\"Courier New\"><b>Courier New 10 Gras</b></span>\n\n"
- "<span font_desc=\"Times New Roman italic 12\" foreground=\"#0000FF\">"
- "Times New Roman\n12 Italique"
- "</span>", 98);
- gtk_main ();
- return 0;
- }
-
- gboolean Monter()
- {
- y-=1;
- if (y < destY) return FALSE;
- gtk_window_move (GTK_WINDOW(fen), x, y);
- return TRUE;
- }
-
- gboolean Descendre()
- {
- y+=1;
- if (y > departY)
- {
- gtk_widget_destroy (fen);
- return FALSE;
- }
- gtk_window_move (GTK_WINDOW(fen), x, y);
- return TRUE;
- }
-
- void OK_Click()
- {
- g_timeout_add(intervalle, (gpointer)Descendre, (gpointer)fen);
- }
-
- // Crée la fenêtre popup et démarre l' animation
- void cbx_popup_new(gchar *caption, guchar vitesse)
- {
- GtkWidget *vbox, *label, *button;
- GdkScreen *s;
-
- // Vitesse
- intervalle = (vitesse > 100) ? 1 : 101-vitesse;
-
- // Obtient résolution de l' écran
- s = gdk_screen_get_default();
- x = gdk_screen_get_width (s) - 240;
- departY = y = gdk_screen_get_height(s);
- destY = y - 160;
-
- // Crée la fenêtre
- fen = gtk_window_new (GTK_WINDOW_POPUP);
- gtk_window_move (GTK_WINDOW(fen), x, y);
- g_signal_connect(G_OBJECT(fen),"destroy",G_CALLBACK(gtk_main_quit),NULL);
- gtk_window_set_default_size (GTK_WINDOW(fen), 200, 100);
- gtk_container_border_width(GTK_CONTAINER(fen),3);
-
- vbox = gtk_vbox_new (FALSE, 10);
- gtk_container_add (GTK_CONTAINER (fen), vbox);
-
- // Label
- label=gtk_label_new(NULL);
- gtk_label_set_markup(GTK_LABEL(label), caption);
- gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
- /*
- label = gtk_label_new (caption);
- gtk_label_set_line_wrap_mode (GTK_LABEL(label), PANGO_WRAP_WORD);
- */
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);
-
- // Bouton fermer
- button = gtk_button_new_with_label ("OK");
- gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
- g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(OK_Click),(gpointer)fen);
-
- gtk_widget_show_all (fen);
- // On monte. g_timeout_add exécute la fonction Monter() à intervalle régulier
- g_timeout_add(intervalle, (gpointer)Monter, (gpointer)fen);
- }
#include <gtk/gtk.h>
gint x, y, departY, destY;
guchar intervalle=1;
GtkWidget *fen;
void cbx_popup_new(gchar *caption, guchar vitesse);
int main( int argc, char **argv )
{
gtk_init (&argc, &argv);
cbx_popup_new (
"<span face=\"Courier New\"><b>Courier New 10 Gras</b></span>\n\n"
"<span font_desc=\"Times New Roman italic 12\" foreground=\"#0000FF\">"
"Times New Roman\n12 Italique"
"</span>", 98);
gtk_main ();
return 0;
}
gboolean Monter()
{
y-=1;
if (y < destY) return FALSE;
gtk_window_move (GTK_WINDOW(fen), x, y);
return TRUE;
}
gboolean Descendre()
{
y+=1;
if (y > departY)
{
gtk_widget_destroy (fen);
return FALSE;
}
gtk_window_move (GTK_WINDOW(fen), x, y);
return TRUE;
}
void OK_Click()
{
g_timeout_add(intervalle, (gpointer)Descendre, (gpointer)fen);
}
// Crée la fenêtre popup et démarre l' animation
void cbx_popup_new(gchar *caption, guchar vitesse)
{
GtkWidget *vbox, *label, *button;
GdkScreen *s;
// Vitesse
intervalle = (vitesse > 100) ? 1 : 101-vitesse;
// Obtient résolution de l' écran
s = gdk_screen_get_default();
x = gdk_screen_get_width (s) - 240;
departY = y = gdk_screen_get_height(s);
destY = y - 160;
// Crée la fenêtre
fen = gtk_window_new (GTK_WINDOW_POPUP);
gtk_window_move (GTK_WINDOW(fen), x, y);
g_signal_connect(G_OBJECT(fen),"destroy",G_CALLBACK(gtk_main_quit),NULL);
gtk_window_set_default_size (GTK_WINDOW(fen), 200, 100);
gtk_container_border_width(GTK_CONTAINER(fen),3);
vbox = gtk_vbox_new (FALSE, 10);
gtk_container_add (GTK_CONTAINER (fen), vbox);
// Label
label=gtk_label_new(NULL);
gtk_label_set_markup(GTK_LABEL(label), caption);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
/*
label = gtk_label_new (caption);
gtk_label_set_line_wrap_mode (GTK_LABEL(label), PANGO_WRAP_WORD);
*/
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 10);
// Bouton fermer
button = gtk_button_new_with_label ("OK");
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(OK_Click),(gpointer)fen);
gtk_widget_show_all (fen);
// On monte. g_timeout_add exécute la fonction Monter() à intervalle régulier
g_timeout_add(intervalle, (gpointer)Monter, (gpointer)fen);
}
Conclusion
Pour compiler sous windows:
1) Télécharger le runtime d'exécution http://gtk.alkia.org/ et installez le dans Program Files/fichiers communs/GTK/2.0
2) Sous Dev-cpp installez le package du même site puis compiler/exécuter.
Pour compiler/exécuter sous linux:
1) Installez les headers de développement GTK+. Sous debian: # aptitude install libgtk2.0-dev
2) Pour compiler, pas besoin de makefile pour un projet aussi simple. Une commande:
$ gcc -Wall -s pop.c -o pop `gtk-config --cflags --libs gtk+-2.0`
et pour exécuter, double-cliquer sur l'exe ou saissiez cette commande:
$ ./pop
Historique
- 06 mai 2007 22:25:08 :
- Ajout du screenshot.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
(vc++) menu popup [ par madVinz ]
$@lµT, je cherche un faire un menu ki saffiche a la position du curseur, mé sans fenetre, qd on lance le prog, le menu saffiche direct la ou é le curs
Popup dans un popup [ par CyberP ]
J'ai créé un programme dont la seule fenêtre est une DialogBox. J'ai rajouté une autre DialogBox pour le "A propos de" mais celle-ci ne s'affiche pas
Popup menu [ par garslouche ]
Bonjour,je voudrais créer un menu contextuel tout simple.J'ai créé un menu avec l'éditeur de VC++ et j'utilise la méthode OnContextMenu : void CTestme
VC++ 6 && popup menu [ par safira ]
safiraSalut!Comment doit-on faire pour faire apparaître un popup menu suivant la position d'un dialog?Par exemple, j'ai le dialog qui apparaît dans un
Popup [ par safira ]
safiraSalut comment mettre un événement pour un popup?J'aimerais quand je clique sur le bouton droit de la souris, qu'apparaisse mon popup.MerciSaf
VC++ 6 && popup [ par safira ]
safiraSalut!Quelqu'un saurait me donner une fonction qui permet de:quand je clique sur le bouton droit de la souris, apparaisse mon popup menu. Une su
Icône barre de titre dans PopUp [ par larion ]
Bonjour,Je travaille avec C++Builder6 et désire faire une manip. de bien particulière :1 - Créer un Popup sur un click droit sur une icône : pas de pr
Créer un popup menu (flottant) avec le click droit de la souris [ par Frenchy62620 ]
Je voudrais pouvoir créer un menu popup (flottant) avec le click droit de la souris..dans l'editeur VC6++ je ne vois pas cette fonction juste des menu
Menu Popup wxWidget [ par sebboue ]
Bonjour à tous, J'essai désespérément de faire un menu popup que j’aimerais faire apparaître par un clic droit ! J&
Anti popup, probleme de kill !! [ par mistere ]
Salut a tous, bon voila mon probleme, j'ai fait un anti popup pour fermer des fenetres IE qui se lance toute seule meme quand je navigue pas, par exem
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
MATRICE TEMPLATEMATRICE TEMPLATE par hjr2610
Cliquez pour lire la suite par hjr2610 RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|