GTK+20杂项构件1.docx
- 文档编号:6470097
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:31
- 大小:155.71KB
GTK+20杂项构件1.docx
《GTK+20杂项构件1.docx》由会员分享,可在线阅读,更多相关《GTK+20杂项构件1.docx(31页珍藏版)》请在冰豆网上搜索。
GTK+20杂项构件1
GTK+2.0-----杂项构件
(1)
GTK+2.02008-12-1312:
48:
25阅读933评论0 字号:
大中小 订阅
标签构件GtkLabel
GtkLabel(标签构件)是GTK中最常用的构件,实际上它很简单。
因为没有相关联的X窗口,标签构件不能引发信号。
如果需要引发信号,可以将它放在一个事件盒构件中,或放在按钮构件里面。
用以下函数创建新标签构件:
GtkWidget*gtk_label_new(char*str);
唯一的参数是要由标签显示的字符串。
创建标签构件后,要改变标签内的文本,用以下函数:
voidgtk_label_set_text(GtkLabel*lacbel,char*str);
第一参数是前面创建的标签构件(用GTK_LABEL()宏转换),并且第二个参数是新字符串。
如果需要,新字符串需要的空间会做自动调整。
在字符串中放置换行符,可以创建多行标签。
用以下函数取得标签的当前文本:
voidgtk_label_get(GtkLabel*Label,char**str);
第一个参数是前面创建的标签构件,并且第二个参数是要返回的字符串。
不要释放返回的字符串,因为GTK内部要使用它。
标签的文本可以用以下函数设置对齐方式:
voidgtk_label_set_justify(GtkLabel*Label,GtkJustificationjtype);
jtype的值可以是:
GTK_JUSTIFY_LEFT左对齐
GTK_JUSTIFY_RIGHT右对齐
GTK_JUSTIFY_CENTER居中对齐(默认)
GTK_JUSTIFY_FILL充满
标签构件的文本会自动换行。
用以下函数激活“自动换行”:
voidgtk_label_set_line_wrap(GtkLabel*Label,gbooleanwrap);
wrap参数可取TRUE或FALSE,对应于自动换行和不自动换行。
如果想要使标签构件加下划线,可以在标签构件中设置显示模式:
voidgtk_label_set_pattern(GtkLabel*Label,constgchar*pattern);
pattern参数指定下划线的外观。
它由一串下划线和空格组成。
下划线指示标签的相应字符应该加一个下划线。
例如,“——”将在标签的第1、第2个字符和第8、第9个字符加下划线。
下面是一个说明这些函数的短例子。
这个例子用框架构件能更好地示范标签的风格。
/*GtkLabel示例开始label.c*/
#include
intmain(intargc,
char*argv[])
{
staticGtkWidget*window=NULL;
GtkWidget*hbox;
GtkWidget*vbox;
GtkWidget*frame;
GtkWidget*label;
/*初始化GTK*/
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window),"destroy",
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
gtk_window_set_title(GTK_WINDOW(window),"Label");
vbox=gtk_vbox_new(FALSE,5);
hbox=gtk_hbox_new(FALSE,5);
gtk_container_add(GTK_CONTAINER(window),hbox);
gtk_box_pack_start(GTK_BOX(hbox),vbox,FALSE,FALSE,0);
gtk_container_set_border_width(GTK_CONTAINER(window),5);
frame=gtk_frame_new("NormalLabel");
label=gtk_label_new("ThisisaNormallabel");
gtk_container_add(GTK_CONTAINER(frame),label);
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
frame=gtk_frame_new("Multi-lineLabel");
label=gtk_label_new("ThisisaMulti-linelabel.\nSecondline\nThirdline");
gtk_container_add(GTK_CONTAINER(frame),label);
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
frame=gtk_frame_new("LeftJustifiedLabel");
label=gtk_label_new("ThisisaLeft-Justified\n"\
"Multi-linelabel.\nThirdline");
gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);
gtk_container_add(GTK_CONTAINER(frame),label);
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
frame=gtk_frame_new("RightJustifiedLabel");
label=gtk_label_new("ThisisaRight-Justified\nMulti-linelabel.\n"\
"Fourthline,(j/k)");
gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_RIGHT);
gtk_container_add(GTK_CONTAINER(frame),label);
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
vbox=gtk_vbox_new(FALSE,5);
gtk_box_pack_start(GTK_BOX(hbox),vbox,FALSE,FALSE,0);
frame=gtk_frame_new("Linewrappedlabel");
label=gtk_label_new("Thisisanexampleofaline-wrappedlabel.It"\
"shouldnotbetakinguptheentire"
/*一大段空格,用来测试间距*/\
"widthallocatedtoit,butautomatically"\
"wrapsthewordstofit."\
"Thetimehascome,forallgoodmen,tocometo"\
"theaidoftheirparty."\
"Thesixthshei’kssixshee’pssick.\n"\
"Itsupportsmultipleparagraphscorrectly,"\
"andcorrectlyadds"\
"manyextraspaces.");
gtk_label_set_line_wrap(GTK_LABEL(label),TRUE);
gtk_container_add(GTK_CONTAINER(frame),label);
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
frame=gtk_frame_new("Filled,wrappedlabel");
label=gtk_label_new("Thisisanexampleofaline-wrapped,filledlabel
"\
"Itshouldbetaking"\
"uptheentirewidthallocatedtoit."
\
"Hereisasentencetoprove"\
"mypoint.Hereisanothersentence."\
"Herecomesthesun,dodedodedo.\n"\
"Thisisanewparagraph.\n"\
"Thisisanothernewer,longer,better"\
"paragraph.Itiscomingtoanend,"\
"unfortunately.");
gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_FILL);
gtk_label_set_line_wrap(GTK_LABEL(label),TRUE);
gtk_container_add(GTK_CONTAINER(frame),label);
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
frame=gtk_frame_new("Underlinedlabel");
label=gtk_label_new("Thislabelisunderlined!
\n"
"Thisoneisunderlinedinquiteafunkyfashion");
gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);
gtk_label_set_pattern(GTK_LABEL(label),
"____________________________________\
__________________");
gtk_container_add(GTK_CONTAINER(frame),label);
gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
gtk_widget_show_all(window);
gtk_main();
return(0);
}
/*示例结束*/
图9-1是上面代码的运行结果。
这个例子展示了GtkLabel构件的各种属性。
图9-1标签构件
箭头构件GtkArrow
GtkArrow(箭头构件)画一个箭头,面向几种不同的方向,并有几种不同的风格。
在许多应用程序中,常用于创建带箭头的按钮。
和标签构件一样,它不能引发信号。
只有两个函数用来操纵箭头构件:
GtkWidget*gtk_arrow_new(GtkArrowTypearrow_type,GtkShadowTypeshadow_type);
voidgtk_arrow_set(GtkArrow*arrow,GtkArrowTypearrow_type,GtkShadowTypeshadow_type);
第一个函数创建新的箭头构件,指明构件的类型和外观;第二个函数用来改变箭头构件类型和外观。
arrow_type参数指示箭头指向哪个方向,可以取下列值:
GTK_ARROW_UP向上
GTK_ARROW_DOWN向下
GTK_ARROW_LEFT向左
GTK_ARROW_RIGHT向右
shadow_type参数指明箭头的投影的类型,可以取下列值:
GTK_SHADOW_IN
GTK_SHADOW_OUT(缺省值)
GTK_SHADOW_ETCHED_IN
GTK_SHADOW_ETCHED_OUT
下面是说明这些类型和外观的例子。
/*GtkArrow示例arrow.c*/
#include
/*用指定的参数创建一个箭头构件并将它组装到按钮中*/
GtkWidget*create_arrow_button(GtkArrowTypearrow_type,GtkShadowTypeshadow_type)
{
GtkWidget*button;
GtkWidget*arrow;
button=gtk_button_new();
arrow=gtk_arrow_new(arrow_type,shadow_type);
gtk_container_add(GTK_CONTAINER(button),arrow);
gtk_widget_show(button);
gtk_widget_show(arrow);
return(button);
}
intmain(intargc,
char*argv[])
{
/*构件的存储类型是GtkWidget*/
GtkWidget*window;
GtkWidget*button;
GtkWidget*box;
/*初始化Gtk*/
gtk_init(&argc,&argv);
/*创建一个新窗口*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"ArrowButtons");
gtk_signal_connect(GTK_OBJECT(window),"destroy",
GTK_SIGNAL_FUNC(gtk_main_quit),NULL);
/*设置窗口的边框的宽度*/
gtk_container_set_border_width(GTK_CONTAINER(window),10);
/*创建一个组装盒以容纳箭头/按钮*/
box=gtk_hbox_new(FALSE,0);
gtk_container_set_border_width(GTK_CONTAINER(box),2);
gtk_container_add(GTK_CONTAINER(window),box);
/*组装、显示所有的构件*/
gtk_widget_show(box);
button=create_arrow_button(GTK_ARROW_UP,GTK_SHADOW_IN);
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,3);
button=create_arrow_button(GTK_ARROW_DOWN,GTK_SHADOW_OUT);
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,3);
button=create_arrow_button(GTK_ARROW_LEFT,GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,3);
button=create_arrow_button(GTK_ARROW_RIGHT,GTK_SHADOW_ETCHED_OUT);
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,3);
gtk_widget_show(window);
/*进入主循环,等待用户的动作*/
gtk_main();
return(0);
}
/*示例结束*/
上面代码的运行效果见图9-2。
在窗口上创建了四个带箭头的按钮。
工具提示对象GtkTooltips
工具提示对象(GtkTooltips)就是当鼠标指针移到按钮或其他构件上并停留几秒时,弹出的文本串。
工具提示对象很容易使用,所以在此仅仅对它们进行解释,不再举例。
本书的其他示例里面有很多都用到了工具提示对象。
不接收事件的构件(没有自己的X窗口的构件)不能和工具提示对象一起工作。
可以使用gtk_tooltips_new()函数创建工具提示对象。
因为GtkTooltips对象可以重复使用,一般在应用程序中仅需要调用这个函数一次。
GtkTooltips*gtk_tooltips_new(void);
一旦已创建新的工具提示,并且希望在某个构件上应用它,可调用以下函数设置它:
voidgtk_tooltips_set_tip(GtkTooltips*tooltip,
GtkWidget*widget,constgchar*tip_text,constgchar*tip_private);
第一个参数是已经创建的工具提示对象,其后第二个参数是希望弹出工具提示的构件,第三个参数是要弹出的文本。
最后一个参数是作为标识符的文本串,当用GtkTipsQuery实现上下文敏感的帮助时要引用该标识符。
目前,你可以把它设置为NULL.
下面有个短例子:
GtkTooltips*tooltips;
GtkWidget*button;
.
.
tooltips=gtk_tooltips_new();
button=gtk_button_new_with_label("button1");
.
.
gtk_tooltips_set_tip(tooltips,button,"Thisisbutton1",NULL);
图9-2GtkArrow构件
还有其他与工具提示有关的函数,下面仅仅列出一些函数的简要描述。
voidgtk_tooltips_enable(GtkTooltips*tooltip);
激活已经禁用的工具提示对象。
voidgtk_tooltips_disable(GtkTooltips*tooltip);
禁用已经激活的工具提示对象。
voidgtk_tooltips_set_delay(GtkTooltips*tooltip,gintdelay);
设置鼠标在构件上停留多少毫秒后弹出工具提示,默认是500毫秒(半秒)。
voidgtk_tooltips_set_colors(GtkTooltips*tooltips,
GdkColor*background,
GdkColor*foreground);
设置工具提示的前景色和背景色。
上面是所有与工具提示有关的函数,实际上比你想要知道的还多。
进度条构件GtkProgressBar
进度条用于显示正在进行的操作的状态。
它相当容易使用,在下面的代码中可以看到。
下面的内容从创建一个新进度条开始。
有两种方法创建进度条,简单的方法不需要参数,另一种方法用一个调整对象作为参数。
如果前者使用,进度条创建它拥有的调整对象。
GtkWidget*gtk_progress_bar_new(void);
GtkWidget*gtk_progress_bar_new_with_adjustment(GtkAdjustment*adjustment);
第二种方法的优势是我们能用调整对象明确指定进度条的范围参数。
进度条的调整对象能用下面的函数动态改变:
voidgtk_progress_set_adjustment(GtkProgress*progress,GtkAdjustment*adjustment);
既然进度条已经创建,那就可以使用它了。
voidgtk_progress_bar_update(GtkProgressBar*pbar,gfloatpercentage);
更新进度条时,第一个参数是希望操作的进度条,第二个参数是“已完成”的百分比,意思是进度条从0~100%已经填充的数量。
它以0~1范围的实数传递给函数。
GTK1.2版已经给进度条添加了一个新的功能,那就是允许它以不同的方法显示其值,并通知用户它的当前值和范围。
进度条可以用以下函数设置它的移动方向:
voidgtk_progress_bar_set_orientation(GtkProgressBar*pbar,GtkProgressBarOrientationorientation);
orientation参数可以取下列值之一,以指示进度条的移动方向:
GTK_PROGRESS_LEFT_TO_RIGHT从左向右
GTK_PROGRESS_RIGHT_TO_LEFT从右向左
GTK_PROGRESS_BOTTOM_TO_TOP从下向上
GTK_PROGRESS_TOP_TO_BOTTOM从上向下
进度条可以以连续和间断的方式显示进度处理的数值。
在连续的方式下,进度条每个值都会更新;在间断方式下,进度条以不连续的方式更新。
更新的次数是可配置的。
进度条的式样可以用以下函数进行更新:
voidgtk_progress_bar_set_bar_style(GtkProgressBar*pbar,GtkProgressBarStylestyle);
style参数取以下两种值:
GTK_PROGRESS_CONTINUOUS连续更新
GTK_PROGRESS_DISCRETE间断更新
间断更新的次数可以用以下函数设置:
gtk_progress_bar_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GTK 20 杂项 构件