2010-02-08 17 views
5

Nel seguente codice, voglio che il colore di sfondo del GTK_WINDOW_TOPLEVEL principale sia 0xc0deed. Ma quando corro, sembra nero. Ho anche provato gtk_drawing_area_new e aggiungendolo alla finestra principale. Ma ancora sta comparendo nero, anche se ho potuto ottenere altri colori come il rosso, blu, bianco, eccColore di sfondo per GTK_WINDOW_TOPLEVEL Gtk Widget

#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; 
} 

risposta

5

I componenti GdkColor sono a 16 bit, avendo così una serie di 0 e 65535. Moltiplica i valori con 65535/255 e starai bene.

Ad esempio il giallo sarebbe:

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

Grazie .. Grazie mille! :) – bluegenetic

1

Anche se la domanda è piuttosto vecchio, vorrei fornire un'altra risposta che non necessita di calcolo.

È possibile utilizzare gdk_color_parse() per analizzare la rappresentazione della stringa del proprio colore. Come accennato nel documentation, questo funziona su diversi formati: [sic!]

La stringa può uno di un grande insieme di nomi standard (tratto dal file rgb.txt X11), oppure può essere un valore esadecimale nel formato "#rgb" "#rrggbb", "#rrrgggbbb" o "#rrrrggggbbbb" dove "r", "g" e "b" sono cifre esadecimali dei componenti rosso, verde e blu del colore , rispettivamente.

Quindi nel tuo caso questo sarebbe semplicemente:

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

Si prega di notare, inoltre, che a partire dal Gtk 3.0, gtk_widget_modify_bg() è deprecato. Utilizzare invece gtk_widget_override_background_color().