2008-09-19 29 views
4

如果我正在編寫一個想通過顏色使用某些信息的應用程序,我該如何更改給定小部件的背景和前景顏色?我想知道如何在glade中做到這一點,如果可能的話,以及以編程方式(計算顏色)。如何更改GTK +中任意小部件的顏色?

我想知道如何對一個複雜的小部件執行此操作,例如,HBox包含一個VBox,其中包含一些Labels

理想的情況下,這也將包括解決方案的解決方案,可以讓我色調窗口小部件的現有顏色,並通過主題識別正在使用的任何圖像的平均色彩,讓我可以以編程方式補償任何顏色的選擇可能使文本不可讀或以其他方式衝突 - 但如果我只需將一個按鈕變成紅色,我會很高興。

回答

8

示例程序:

#include <gtk/gtk.h> 

static void on_destroy(GtkWidget* widget, gpointer data) 
{ 
     gtk_main_quit(); 
} 

int main (int argc, char* argv[]) 
{ 
     GtkWidget* window; 
     GtkWidget* button; 

     gtk_init(&argc, &argv); 
     window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 
     g_signal_connect(G_OBJECT (window), "destroy", 
       G_CALLBACK (on_destroy), NULL); 
     button = gtk_button_new_with_label("Hello world!"); 
     GdkColor red = {0, 0xffff, 0x0000, 0x0000}; 
     GdkColor green = {0, 0x0000, 0xffff, 0x0000}; 
     GdkColor blue = {0, 0x0000, 0x0000, 0xffff}; 
     gtk_widget_modify_bg(button, GTK_STATE_NORMAL, &red); 
     gtk_widget_modify_bg(button, GTK_STATE_PRELIGHT, &green); 
     gtk_widget_modify_bg(button, GTK_STATE_ACTIVE, &blue); 
     gtk_container_add(GTK_CONTAINER(window), button); 
     gtk_widget_show_all(window); 
     gtk_main(); 
     return 0; 
} 
1

要修改小部件的顏色,您可以初始化一個顏色,並用它來修改小部件的顏色:

GdkColor color; 
gdk_color_parse("#00FF7F", &color); 
gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color); 

要使用圖片代替顏色:

GdkPixbuf *image = NULL; 
GdkPixmap *background = NULL; 
GtkStyle *style = NULL; 

image = gdk_pixbuf_new_from_file ("background.jpg", NULL); 
gdk_pixbuf_render_pixmap_and_mask (image, &background, NULL, 0); 
style = gtk_style_new(); 
style->bg_pixmap [0] = background; 

gtk_widget_set_style (GTK_WIDGET(widget), GTK_STYLE (style)); 
相關問題