直接通过下面的方式是无法改变GtkScrolledWindow背景色的:
GdkColor white; gdk_color_parse ("WHITE", &white); gtk_widget_modify_bg (scrolledWindow, GTK_STATE_NORMAL, &white);
必须连GtkViewport 的背景也同时改变:
const char scroll_style[] = "style \"view-scroll\" {" " bg[NORMAL] = \"#FFFFFF\"" "}" "class \"GtkViewport\" style \"view-scroll\"" "class \"GtkScrolledWindow\" style \"view-scroll\""; gtk_rc_parse_string (scroll_style);
另外,在style数组里的关键字“class”可以替换成“widget_class”,其意义为:
资源文件定义了一系列风格, 并通过三种匹配规则方式将这些风格应用到匹配的widget上,
每种规则都支持文件通配符(wildcards)'?'和'*':
* widget: 通过widget path来找到匹配的widget. widget path 是一个"."分
割的字符串, 按照从最外层到最里层的顺序,依此指定了widget的parent和该
widget本身的name, 而这些name是通过gtk_widget_set_name()来设置的. 如
果某个widget或者其parent没有设置name, 则用class name.
例如:
(1)widget "mywindow.vbox1.entry0" style "style0": 对mywindow下的
vbox1中的entry0,设置其style为style0
(2)widget "mywindow.*.entry1" style "style1": 对mywindow下所有
widget下的名为entry1的widget, 设置其style为style1
(3)widget "mywindow.GtkHBox.entry2" style "style2": 对mywindow下
所有类型为GtkHBox的widget下的名为entry2的widget, 设置其style为style2
(4)widget "mywindow.Gtk?Box.GtkEntry" style "style3": 对mywindow下
所有类型为GtkHBox或者GtkVBox的widget下的所有类型为GtkEntry的widget,
设置其style为style3
* widget_class: 通过class path来找到匹配的widget. class path与
widget path类似, 都是用"."来分割字符串, 但是每个字符串都是widget的parent
的class name. 例如:
(1)widget_class "GtkWindow.GtkHBox.GtkEntry" style "style1"
(2)widget_class "GtkWindow.Gtk*Box.Gtk?Box.GtkLabel" style "style2"
(3)widget_class "GtkWindow.*.GtkLabel" style "style3"
* class: 通过继承关系来找到匹配的widget.
例如: class "GtkButton" style "my-style" 指定了所有的GtkButton, 包括
GtkToggleButton和GtkCheckButton都要用到my-style风格.