2010-02-08 44 views
5

Trong mã sau, tôi muốn màu nền của GTK_WINDOW_TOPLEVEL chính là 0xc0deed. Nhưng khi tôi chạy nó xuất hiện màu đen. Tôi thậm chí đã thử gtk_drawing_area_new và thêm nó vào cửa sổ chính. Nhưng nó vẫn đang xuất hiện màu đen mặc dù tôi có thể nhận được các màu sắc khác như đỏ, xanh, vv trắngMàu nền cho 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; 
} 

Trả lời

5

Các GdkColor thành phần là 16-bit, do đó có một loạt các từ 0 đến 65535. Multiply giá trị của bạn với 65535/255 và bạn sẽ ổn thôi.

Ví dụ màu vàng sẽ là:

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

Cảm ơn bạn .. Cảm ơn rất nhiều! :) – bluegenetic

1

Mặc dù câu hỏi là khá cũ, tôi muốn cung cấp một câu trả lời mà không cần tính toán.

Bạn có thể sử dụng gdk_color_parse() để phân tích biểu diễn chuỗi màu của bạn. Như đã đề cập trong documentation, này hoạt động trên các định dạng khác nhau: [! Sic]

Chuỗi có thể hoặc là một trong một tập hợp lớn các tên chuẩn (lấy từ các tập tin rgb.txt X11), hoặc nó có thể là một giá trị thập lục phân dưới dạng “#rgb” “#rrggbb”, “#rrrgggbbb” hoặc “#rrrrggggbbbb” trong đó “r”, “g” và “b” là các chữ số thập phân của các thành phần màu đỏ, xanh lục và xanh dương của màu , tương ứng.

Vì vậy, trong trường hợp của bạn này chỉ đơn giản sẽ là:

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

hãy cũng lưu ý rằng tính Gtk 3.0, gtk_widget_modify_bg() bị phản đối. Sử dụng gtk_widget_override_background_color() thay thế.