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 :

Image en fond de fenêtre


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti Avatar de Saintux
    Homme Profil pro
    Chercheur ( de travail )
    Inscrit en
    Janvier 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur ( de travail )
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 39
    Par défaut Image en fond de fenêtre [Abandonné]
    Bonjours,

    J'ai un petit problème avec une fenêtre GTK+, problème soulevé sur plusieurs sites/forum mais sans solutions apportées : mettre une image en fond d'une fenêtre.

    Ce code fonctionne sous linux mais pas sous windows :

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    #include <gtk/gtk.h>
     
    void fond_ecran_set(GtkWidget *pWindow, gpointer user_data)
    {
    	GdkPixmap *pixmap_fond=(GdkPixmap*) user_data;
     
    	if (pixmap_fond)
    	{
    		gdk_window_set_back_pixmap (pWindow->window, pixmap_fond, FALSE);
     
    	}
    }
     
    static void clicked(GtkWindow *win, GdkEventButton *event, gpointer user_data)
    {
        /* toggle window manager frames */
        gtk_window_set_decorated(win, !gtk_window_get_decorated(win));
    }
     
    gint main(int argc, char **argv)
    {
    	GtkWidget *pWindow = NULL;
    	GtkWidget *layout = NULL;
     
    	GdkPixbuf *pixbuf_fond=NULL;
    	GdkPixmap *pixmap_fond=NULL;
     
    	// Initialisation des librairies GTK+
    	gtk_init(&argc, &argv);
     
    	// Création d'une fenêtre principale.
    	pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	gtk_widget_set_size_request(pWindow, 800, 325);
    	gtk_window_set_title(GTK_WINDOW(pWindow), "Fenêtre");
    	gtk_window_set_default_size(GTK_WINDOW(pWindow), 800, 325);
    	gtk_window_set_decorated(GTK_WINDOW(pWindow), 0);
    	gtk_window_set_resizable(GTK_WINDOW(pWindow), 0);
    	gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER_ALWAYS);
     
     
    	// Chargement de l'image dans un pixbuf à la taille de la fenêtre
    	pixbuf_fond=gdk_pixbuf_new_from_file_at_size("img/fondfenetre.jpg", 800, 325, NULL);
     
    	/* Si le chargement a réussi on crée le pixmap qui sera utilisé pour le fond.
    	Dans le cas contraire pixmap_fond=NULL. Cette valeur étant transmise aux fcts
    	d'affichage, on peut a tout moment savoir si on peut afficher ou non.*/
    	if (pixbuf_fond)
    	{
                    // Création d'un GdkPixmap vierge
    		pixmap_fond=gdk_pixmap_new(pWindow->window, gdk_pixbuf_get_width(pixbuf_fond),
    			gdk_pixbuf_get_height(pixbuf_fond),
    			gdk_visual_get_system()->depth);
     
                    // insertion du GdkPixbuf (image chargée) dans le GdkPixmap.
    		gdk_draw_pixbuf(pixmap_fond, pWindow->style-> fg_gc[GTK_WIDGET_STATE (pWindow)], pixbuf_fond,0,0,0,0,
    			 gdk_pixbuf_get_width(pixbuf_fond), gdk_pixbuf_get_height(pixbuf_fond),
    			 gdk_visual_get_system()->depth,0,0);
     
                    // Supression du GdkPixbuf devenu inutile
    		g_object_unref(pixbuf_fond);
     
    	}
     
    	// faire apparaitre la barre de la fenêtre au clic
    	gtk_widget_add_events(pWindow, GDK_BUTTON_PRESS_MASK);
    	g_signal_connect(G_OBJECT(pWindow), "button-press-event", G_CALLBACK(clicked), NULL);
     
    	//grille de positionnement
    	layout = gtk_table_new(3, 3, 1);
    	gtk_container_add(GTK_CONTAINER(pWindow), layout);
     
    	// Signal associé pour l'affichage de l'image de fond.
    	g_signal_connect(G_OBJECT(pWindow), "realize", G_CALLBACK(fond_ecran_set), pixmap_fond);
     
    	// Signaux associés à la fenêtre principale pour quitter.
    	g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
    	g_signal_connect(G_OBJECT(pWindow), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
     
    	// Boucle principale GTK+
    	gtk_widget_show_all(pWindow);
    	gtk_main();
     
    	return 0;
    }
    Malgré toutes mes recherches, l'image ne s'affiche pas en fond de page sous windows.

    Vous êtes mon dernier espoir

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Tu trouveras un début de réponse ici.

  3. #3
    Membre averti Avatar de Saintux
    Homme Profil pro
    Chercheur ( de travail )
    Inscrit en
    Janvier 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur ( de travail )
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 39
    Par défaut
    Merci pour la réponse, mais comme je l'ai dis sur mon premier post, c'est "malgré mes recherches" que je n'ai pas trouvé

    J'ai déjà essayé les fichiers rc sans succès, j'ai rien trouvé dans la doc de gtk non plus.

    Suis-je tombé sur un problème insoluble ?

    EDIT : Le code du premier post fonctionne sous linux seulement sur mon pc portable, pas sur mon fixe où j'ai le même problème que les windowsiens...

  4. #4
    Membre averti Avatar de Saintux
    Homme Profil pro
    Chercheur ( de travail )
    Inscrit en
    Janvier 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur ( de travail )
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 39
    Par défaut
    Bon, problème non résolu, j'ai mis une couleur en fond pour tenter d'arranger une peu le design....

    Merci quand même pour la réponse.

  5. #5
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Utiliser les GtkRc n'apportent vraiment aucune solution?

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut Gtkrc
    Bonjour,

    Si ça peut vous aider, moi je place dans mon code la ligne :

    gtk_rc_parse("./gtkrc.rc");

    pour prendre en compte mon fichier gtkrc.rc dans lequel je défini mon style :

    un exemple pour que toutes mes fenêtres (GtkWindow) aient un fond similaire :

    --------------------------------------------------------------------------
    pixmap_path "./"

    style "Windows"
    {
    bg_pixmap[NORMAL] = "fond.jpg"
    bg[NORMAL] = "#CC9664"
    fg[NORMAL] = "yellow"
    fg[INSENSITIVE] = "white"
    }
    class "GtkWindow" style "Windows"
    --------------------------------------------------------------------------

    J'ai trouvé cet exemple rapidement sur le Web, ça marche bien pour moi.

    J'espère que ça vous sera utile

Discussions similaires

  1. Charger image bmp comme fond de fenêtre display
    Par vasilpapa dans le forum Haskell
    Réponses: 3
    Dernier message: 30/01/2015, 10h10
  2. [WD19] Transparence des images de fond de fenêtre
    Par lololebricoleur dans le forum WinDev
    Réponses: 2
    Dernier message: 30/07/2014, 11h15
  3. Une image en fond d'une fenêtre
    Par zeecrowddev dans le forum Contribuez
    Réponses: 0
    Dernier message: 16/06/2014, 22h15
  4. Image en fond de fenêtre
    Par Razgrïzz dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 15/06/2009, 17h01
  5. [VB6] [Graphisme] Image de fond stretchable dans mdiform
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 17/02/2003, 10h45

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