GTK+20杂项构件1.docx

上传人:b****5 文档编号:6470097 上传时间:2023-01-06 格式:DOCX 页数:31 大小:155.71KB
下载 相关 举报
GTK+20杂项构件1.docx_第1页
第1页 / 共31页
GTK+20杂项构件1.docx_第2页
第2页 / 共31页
GTK+20杂项构件1.docx_第3页
第3页 / 共31页
GTK+20杂项构件1.docx_第4页
第4页 / 共31页
GTK+20杂项构件1.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

GTK+20杂项构件1.docx

《GTK+20杂项构件1.docx》由会员分享,可在线阅读,更多相关《GTK+20杂项构件1.docx(31页珍藏版)》请在冰豆网上搜索。

GTK+20杂项构件1.docx

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_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1