GTK+浅谈之九控件的外观样式
来源:互联网 发布:苹果手机mac在哪里设置 编辑:程序博客网 时间:2024/06/05 00:09
一、简介
Gtk+2.0控件的外观主要包括控件的背景颜色、控件的前景颜色、控件的字体等因素。控件的状态包括正常状态(GTK_STATE_NORMAL)、控件获得焦点时的状态(GTK_STATE_ACTIVE)、鼠标移动到控件上方时的状态(GTK_STATE_PRELIGHT)、控件失去功能时的状态(GTK_STATE_INSENSITIVE)、控件被选中时的状态(GTK_STATE_SELECTED)等等,不同的状态可以设定不同的外观。
其中函数gtk_widget_modify_bg来设定控件的背景颜色, gtk_widget_modify_fg设置前景颜色, gtk_widget_modify_font设定字体,gtk_widget_modify_text来改变文字录入控件录入的文字颜色,gtk_widget_modify_base来改变文字录入控件的背景颜色,其他的可以参考GTK+2.0的API参考手册。
二、详解
1、程序API
(1)代码
#include <gtk/gtk.h>int main(int argc, char *argv[]){ GtkWidget *window; GtkWidget *vbox; GtkWidget *button; GtkWidget *label; GtkWidget *entry; PangoFontDescription *desc; static GdkColor red = {0, 0xffff, 0, 0}; static GdkColor green = {0, 0, 0xffff, 0}; static GdkColor blue = {0, 0, 0, 0xffff}; static GdkColor yellow = {0, 0xffff, 0xffff, 0}; static GdkColor cyan = {0, 0, 0xffff, 0xffff}; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL); gtk_window_set_title(GTK_WINDOW(window), "设定控件的样式"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(window), 15); desc = pango_font_description_from_string("Simhei 24"); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); button = gtk_button_new_with_label("绿色的按钮"); gtk_widget_modify_bg(button, GTK_STATE_NORMAL, &green); gtk_widget_modify_bg(button, GTK_STATE_ACTIVE, &cyan); gtk_widget_modify_bg(button, GTK_STATE_PRELIGHT, &red); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 8); button = gtk_button_new_with_label("红色字的按钮"); gtk_widget_modify_fg(GTK_BIN(button)->child, GTK_STATE_NORMAL, &red); gtk_widget_modify_fg(GTK_BIN(button)->child, GTK_STATE_ACTIVE, &blue); gtk_widget_modify_fg(GTK_BIN(button)->child, GTK_STATE_PRELIGHT, &green); gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 8); label = gtk_label_new("蓝色的标签文字\n主要是改变了前景颜色"); gtk_widget_modify_fg(label, GTK_STATE_NORMAL, &blue); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 8); desc = pango_font_description_from_string("Simsun 24"); entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry), "红色的输入文字"); gtk_widget_modify_font(entry, desc); gtk_widget_modify_text(entry, GTK_STATE_NORMAL, &red); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 8); entry = gtk_entry_new(); gtk_widget_modify_font(entry, desc); gtk_entry_set_text(GTK_ENTRY(entry), "绿色的背景"); gtk_widget_modify_base(entry, GTK_STATE_NORMAL, &green); //gtk_widget_modify_text(entry, GTK_STATE_NORMAL, &red); gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 8); gtk_widget_show_all(window); gtk_main(); return TRUE;}(2)编译及运行
gcc -o style style.c `pkg-config --libs --cflags gtk+-2.0`
2、外观启动配置文件
更改控件样式还可以编写一个外观启动文件,让单个或多个程序配置为同一风格的显示外观。在/etc/gtk目录下有系统自带的外观启动文件,文件说明了GTK+2.0程序运行时控件的前景颜色、背景颜色、背景图像、字体名称大小等。(1)编写外观启动文件gtkrc,保存在当前程序目录下
style "default"{ fg[INSENSITIVE] = {0, 0, 0} bg[NORMAL] = {0.26, 0.73, 0.30} bg[PRELIGHT] = {0.05, 0.39, 0.01} bg[ACTIVE] = {0.24, 0.67, 0.28} bg[INSENSITIVE] = {0.26, 0.73, 0.30} base[NORMAL] = {0.83, 0.95, 0.83} bg_pixmap[NORMAL] = "back.png" bg_pixmap[ACTIVE] = "back.png" bg_pixmap[PRELIGHT] = "back.png" font_name = "simsun 16"}class "GtkWidget" style "default"(2)编写程序rc.c
#include <gtk/gtk.h>int main(int argc, char *argv[]){ GtkWidget *window; GtkWidget *swin, *hbox; GtkWidget *button, *label; gtk_init(&argc, &argv); gtk_rc_parse("gtkrc"); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize (window, 500, 120); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL); gtk_window_set_title(GTK_WINDOW(window), "外观启动文件"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(window), 10); swin = gtk_scrolled_window_new(NULL, NULL); gtk_container_add(GTK_CONTAINER(window), swin); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); hbox = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 15); gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), hbox); button = gtk_button_new_with_label("普通按钮"); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5); button = gtk_toggle_button_new_with_label("状态按钮"); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5); button = gtk_radio_button_new_with_label(NULL, "单选按钮"); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5); button = gtk_check_button_new_with_label("多选按钮"); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 5); label = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); gtk_entry_set_text(GTK_ENTRY(label), "单行录入"); gtk_widget_show_all(window); gtk_main(); return TRUE;}(3)编译并运行比较
gcc -o rc rc.c `pkg-config --libs --cflags gtk+-2.0`设置样式:
未设置样式:
三、总结
(1)Gtk的样式可以调用API函数,也可以使用标记语言形式。外观启动文件可以参考手册中Rcfile中的内容。(2)若有建议,请留言,在此先感谢!
3 0
- GTK+浅谈之九控件的外观样式
- GTK+浅谈之四定时器的应用
- GTK+浅谈之六自由布局并移动控件位置
- GTK+浅谈之总结
- GTK+浅谈之七多条提示信息的显示
- GTK+浅谈之十五GObject面向对象的继承
- 更改控件的外观
- 控件的外观设置
- android的SPinner外观样式
- 浅谈Java设计模式(九)外观模式(Facade)
- 自定义控件之DataGridView(美化单元格的外观)
- 设计模式之九 --- 外观(Facade)模式
- 设计模式之九 --- 外观(Facade)模式
- 设计模式培训之九:外观模式
- 设计模式培训之九:外观模式
- 设计模式之九 --- 外观(Facade)模式
- java设计模式之九:外观模式
- GTK+浅谈之三简单计算器
- flask大概
- 第一篇博客
- C#银行系统
- 推荐系统综述与代码
- SSL&TLS介绍及差异
- GTK+浅谈之九控件的外观样式
- OCP-V13-704
- iOS集成支付宝
- Mac iOS推送测试
- 2013.10-2015.9 图书馆借阅书籍情况
- 【android】用EditText控件和Button控件实现一个简易计算器
- 函数名作为另一函数的参数
- 23设计模式之装饰模式(Decorator)
- ubuntu 网络配置