C++ 可以设置滚动窗口的颜色吗?

C++ 可以设置滚动窗口的颜色吗?,c++,gtk,gtk2,gtkscrolledwindow,C++,Gtk,Gtk2,Gtkscrolledwindow,我有以下代码: GdkColor color; color.red = 0x0; color.green = 0x0; color.blue = 0x0; gtk_init (&argc, &argv); window = gtk_dialog_new (); gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &color); g_signal_connect (window, "destroy", G_CALLBACK (d

我有以下代码:

GdkColor color;
color.red = 0x0;
color.green = 0x0;
color.blue = 0x0;

gtk_init (&argc, &argv);
window = gtk_dialog_new ();
gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &color);
g_signal_connect (window, "destroy", G_CALLBACK (destroy), NULL);
gtk_window_set_title (GTK_WINDOW (window), "GtkScrolledWindow example");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
gtk_widget_set_size_request (window, 300, 300);
gtk_window_fullscreen (GTK_WINDOW(window));
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_modify_bg(scrolled_window, GTK_STATE_NORMAL, &color);
gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->vbox), scrolled_window, TRUE, TRUE, 0);
gtk_widget_show (scrolled_window);
outside = gtk_table_new (10, 10, FALSE);
gtk_table_set_row_spacings (GTK_TABLE (outside), 10);
gtk_table_set_col_spacings (GTK_TABLE (outside), 10);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), outside);
gtk_widget_modify_bg(scrolled_window, GTK_STATE_NORMAL, &color);
gtk_widget_modify_bg(outside, GTK_STATE_NORMAL, &color);
gtk_widget_show (outside);

由于某些原因,窗口(而非滚动窗口)的颜色设置为黑色。如何更改此设置?

如果这是Gtk3,则应使用CSS:

类似的内容设置了滚动窗口的所有子级的背景色:

scrolledwindow * {
  background-color: red;
}
显然,在实际使用中,您可能会更具体地为您的小部件本身提供一个自定义类


也可以查看inspector以使CSS的试用更容易:

您所需要的只是一个
GtkEventBox

GdkColor color;
color.red = 0x0;
color.green = 0x0;
color.blue = 0x0;

gtk_init (&argc, &argv);
window = gtk_dialog_new ();
gtk_widget_modify_bg(window, GTK_STATE_NORMAL, &color);
g_signal_connect (window, "destroy", G_CALLBACK (destroy), NULL);
gtk_window_set_title (GTK_WINDOW (window), "GtkScrolledWindow example");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
gtk_widget_set_size_request (window, 300, 300);
gtk_window_fullscreen (GTK_WINDOW(window));
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
//gtk_widget_modify_bg(scrolled_window, GTK_STATE_NORMAL, &color);
gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->vbox), scrolled_window, TRUE, TRUE, 0);
gtk_widget_show (scrolled_window);
outside = gtk_table_new (10, 10, FALSE);
gtk_table_set_row_spacings (GTK_TABLE (outside), 10);
gtk_table_set_col_spacings (GTK_TABLE (outside), 10);

GtkWidget *box = gtk_event_box_new();
gtk_container_add(GTK_CONTAINER(box), outside);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), box);
gtk_widget_modify_bg(box, GTK_STATE_NORMAL, &color);
gtk_widget_show (box);

//gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_window), outside);
//gtk_widget_modify_bg(scrolled_window, GTK_STATE_NORMAL, &color);
//gtk_widget_modify_bg(outside, GTK_STATE_NORMAL, &color);
gtk_widget_show (outside);

不幸的是,这是gtk2:(请看一下.Gtk+2使用rc文件和主题引擎。这与以编程方式设置颜色完全无关。当然,你可以在运行时解析Gtk2和Gtk3的任何主题。Gtk2很快就会过时。你应该开始用Gtk3编码并使用CSS。@GTKNORD这是我编写代码的地方的标准。感谢adv冰:)