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
ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0ETENDRE LE TEAM WEB ACCESS DE TFS 2012 - STEP 0 par Philess
L'extensibilité du Team Web Access
Le Web Access (site d'équipe) de Team Foundation Server a été complètement réécrit dans la version 2012 avec pas moins de 400.000 lignes de JavaScript. Ce nouveau modèle a été pensé pour offrir de grandes...
Cliquez pour lire la suite de l'article par Philess SIMULER FACILEMENT L'ENVOI DE MAILSIMULER FACILEMENT L'ENVOI DE MAIL par JeremyJeanson
il m'a été demandé, à plusieurs reprises, comment je faisais pour simuler l'envoi de mail lors de mes démos de Workflow Foundation. Ma solution est plutôt simple : j'utilise la configuration par défaut du SmtpClient et j'oriente les mails vers un dossier ...
Cliquez pour lire la suite de l'article par JeremyJeanson VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Forum
PB PACMAN C++PB PACMAN C++ par garfield95
Cliquez pour lire la suite par garfield95
Logiciels
Easy-Planning (4.5.0.11)EASY-PLANNING (4.5.0.11)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté a... Cliquez pour télécharger Easy-Planning CVEasy (3.1.0.51)CVEASY (3.1.0.51)PHMSD-CVEasy est un logiciel d'aide à la rédaction de CV d'une simplicité déconcertante.
PHMSD-C... Cliquez pour télécharger CVEasy LettresFaciles 2011 (8.6.0.31)LETTRESFACILES 2011 (8.6.0.31)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011 sDEVIS-FACTURES vlPRO (8.4.2.62)SDEVIS-FACTURES VLPRO (8.4.2.62)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO Devis-Factures PHMSD (2.1.0.11)DEVIS-FACTURES PHMSD (2.1.0.11)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD
|