GTK+20杂项构件1Word格式.docx
《GTK+20杂项构件1Word格式.docx》由会员分享,可在线阅读,更多相关《GTK+20杂项构件1Word格式.docx(31页珍藏版)》请在冰豆网上搜索。
标签的文本可以用以下函数设置对齐方式:
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<
gtk/gtk.h>
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);
Multi-lineLabel"
ThisisaMulti-linelabel.\nSecondline\nThirdline"
LeftJustifiedLabel"
ThisisaLeft-Justified\n"
\
"
Multi-linelabel.\nThirdline"
gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);
RightJustifiedLabel"
ThisisaRight-Justified\nMulti-linelabel.\n"
Fourthline,(j/k)"
gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_RIGHT);
Linewrappedlabel"
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);
Filled,wrappedlabel"
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);
Underlinedlabel"
Thislabelisunderlined!
\n"
Thisoneisunderlinedinquiteafunkyfashion"
gtk_label_set_pattern(GTK_LABEL(label),
____________________________________\
__________________"
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*/
/*用指定的参数创建一个箭头构件并将它组装到按钮中*/
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);
/*构件的存储类型是GtkWidget*/
GtkWidget*window;
GtkWidget*box;
/*初始化Gtk*/
gtk_init(&
/*创建一个新窗口*/
ArrowButtons"
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);
button=create_arrow_button(GTK_ARROW_LEFT,GTK_SHADOW_ETCHED_IN);
button=create_arrow_button(GTK_ARROW_RIGHT,GTK_SHADOW_ETCHED_OUT);
gtk_widget_show(window);
/*进入主循环,等待用户的动作*/
上面代码的运行效果见图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;
.
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_