GTK_WINDOW_TOPLEVEL Gtk Widget的背景颜色

时间:2010-02-08 17:47:55

标签: c colors background widget gtk

在下面的代码中,我希望主GTK_WINDOW_TOPLEVEL的背景颜色为0xc0deed。但是当我跑的时候看起来很黑。我甚至尝试了gtk_drawing_area_new并将其添加到主窗口。但它仍然显得黑色,虽然我可以得到其他颜色,如红色,蓝色,白色等

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

2 个答案:

答案 0 :(得分:6)

GdkColor组件为16位,因此范围为0到65535.将您的值乘以65535/255,您就可以了。

例如黄色将是:

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

答案 1 :(得分:2)

虽然问题相当陈旧,但我想提供另一个不需要计算的答案。

您可以使用gdk_color_parse()来解析颜色的字符串表示形式。如documentation中所述,这适用于各种格式:

  

字符串可以是[sic!]大量标准名称中的一个(取自X11 rgb.txt文件),也可以是“#rgb”“#rrggbb”形式的十六进制值,“ #rrrgggbbb“或”#rrrrggggbbbb“其中”r“,”g“和”b“分别是颜色的红色,绿色和蓝色分量的十六进制数字。

所以在你的情况下,这只是:

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

另请注意,自Gtk 3.0起,gtk_widget_modify_bg()已弃用。请改用gtk_widget_override_background_color()