在下面的代码中,我希望主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;
}
答案 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()
。