begin process at 2013 05 24 19:23:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

GTK+

 > [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

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :GTK+ Classé sous :popup, gtimeoutadd, gtkwindowmove, gdkscreengetwidth Niveau :Débutant Date de création :06/05/2007 Date de mise à jour :06/05/2007 22:25:08 Vu / téléchargé :9 243 / 274

Auteur : katsankat

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • pop.cTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 353 octets
  • popup.devTélécharger ce fichier [Réservé aux membres club]1 306 octets

Télécharger le zip


 Historique

06 mai 2007 22:25:08 :
Ajout du screenshot.

 Sources du même auteur

Source avec Zip Source avec une capture [C, WIN32/LINUX] LIB POUR TRAVAILLER DES IMAGES BITMAPS
Source avec Zip Source avec une capture [C/WIN32] REJOINDRE UN AMI SUR COD2 (CALL OF DUTY 2)
Source avec Zip Source avec une capture [WIN32/SPEECH SDK] CONNECTION SERVEUR DE MESSAGERIE POP3
Source avec Zip Source avec une capture [C/LINUX] BALISAGE HTML DE FICHIERS SOURCE C/C++
Source avec Zip Source avec une capture [C/LINUX] ENVOYER UN MESSAGE PAR MAIL

 Sources de la même categorie

Source avec Zip Source avec une capture INFORMATION GTK CONCERNANT UNE TOUCHE par Phelim
Source avec Zip Source avec une capture BINARY CLOCK GTK AVEC CONTRÔLE EN TRAY SOUS LINUX par dje_jay
Source avec Zip GTK _CALCUL par jabirmed
Source avec Zip DICTIONNER RECHERCHE GTK par jabirmed
Source avec Zip JEU DE PIONS EN RESAUX EN GTK+ par karamimed

 Sources en rapport avec celle ci

Source avec Zip POPUP QT ANIMER (ANIMATION DU MEME STYLE QUE LES POPUP DE WI... par wyden
Source avec Zip Source avec une capture MULTI DESKTOPS par AndreJAO
Source avec Zip DROPDOWN LISTBOX (WIN32) par vecchio56

Commentaires et avis

Commentaire de morel16 le 05/08/2007 11:51:50

Salut jo,

Pas mal ce code, peut-etre utile. :)
Si j'arrive à modifier un peu le code (Contour de la fenêtre... par exemple) je m'en servirai dans de futur programme.

Bonne continuation.

Commentaire de Yunchi le 07/08/2007 06:44:29

ca marche tres bien :)

Commentaire de gusgusle le 19/12/2008 16:00:26

Je peux utiliser ton code sachant que j'utilise Qt ?

 Ajouter un commentaire


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 &#224; tous, J'essai d&#233;sesp&#233;r&#233;ment de faire un menu popup que j&#146;aimerais faire appara&#238;tre par un clic droit&nbsp;! 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


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,699 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales