2010-02-08 7 views
5

Dans le code suivant, je souhaite que la couleur d'arrière-plan du fichier GTK_WINDOW_TOPLEVEL principal soit 0xc0deed. Mais quand je cours il apparaît noir. J'ai même essayé gtk_drawing_area_new et l'ai ajouté à la fenêtre principale. Mais encore apparaît noir bien que je pourrais obtenir d'autres couleurs comme le rouge, bleu, blanc, etcCouleur d'arrière-plan pour GTK_WINDOW_TOPLEVEL Widget Gtk

#include <gtk/gtk.h> 

int main(int argc, char *argv[]) 
{ 
    GtkWidget *p_s_window = NULL; 
    GdkColor color; 
    color.red = 0x00C0; 
    color.green = 0x00DE; 
    color.blue = 0x00ED; 
    gtk_init(&argc, &argv); 
    p_s_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_position(GTK_WINDOW(p_s_window), GTK_WIN_POS_CENTER); 
    gtk_window_set_title(GTK_WINDOW(p_s_window), "hello"); 
    gtk_widget_modify_bg(p_s_window, GTK_STATE_NORMAL, &color); 
    g_signal_connect_swapped(G_OBJECT(p_s_window), "destroy", 
      G_CALLBACK(gtk_main_quit), NULL); 
    gtk_widget_show_all(p_s_window); 
    gtk_main(); 
    return 0; 
} 

Répondre

5

Les composants sont GdkColor 16 bits, ayant ainsi une plage de 0 à 65535. Multiplier vos valeurs avec 65535/255 et tout ira bien.

Par exemple jaune serait:

color.red = 0xffff; 
color.green = 0xffff; 
color.blue = 0; 
+0

Merci .. Merci beaucoup! :) – bluegenetic

1

Bien que la question est assez vieux, je voudrais donner une autre réponse qui ne nécessite pas le calcul.

Vous pouvez utiliser gdk_color_parse() pour analyser la représentation sous forme de chaîne de votre couleur. Comme il est mentionné dans le documentation, cela fonctionne sur différents formats: [sic!]

La chaîne peut être soit l'un d'un grand nombre de noms standard (extrait du fichier X11 rgb.txt), ou il peut être valeur hexadécimale sous la forme "#rgb" "#rrggbb", "#rrrgggbbb" ou "#rrrrggggbbbb" où "r", "g" et "b" sont des chiffres hexadécimaux des composantes rouge, verte et bleue de la couleur , respectivement.

ce serait tout simplement donc dans votre cas:

GdkColor color; 
if (gdk_color_parse("#c0deed", &color)) { 
    gtk_widget_modify_bg(p_s_window, GTK_STATE_NORMAL, &color); 
} else { 
    // set default color 
} 

S'il vous plaît noter aussi que de GTK 3.0, gtk_widget_modify_bg() est dépréciée. Utilisez gtk_widget_override_background_color() à la place.

Questions connexes