




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、窗体本讲大纲:初始化初始化建立窗口建立窗口结结束束应应用程序用程序回回调调函函数数其其它它窗体函窗体函数数初始化 无论写哪一个无论写哪一个GTK+GTK+程序需要调用程序需要调用gtk_initgtk_init函数对函数对GTK+GTK+库函数进行初始化。库函数进行初始化。gtk_init()gtk_init()函数的具体介绍如函数的具体介绍如下表下表18.118.1所示:所示: 建立窗口GTK+GTK+的的构构件是件是GUIGUI的的组组成部分。窗口、成部分。窗口、检查检查框、按框、按钮钮和和编辑编辑字段都字段都属属于于构构件。通常件。通常将构将构件和窗口定件和窗口定义为义为指向指向GtkW
2、idgetGtkWidget结构结构的指的指针针。在。在GTK+GTK+中,中,GtkWidgetGtkWidget是用于所有是用于所有构构件和窗口的通用件和窗口的通用数数据据类类型。型。GTK+GTK+库进库进行初始化后,大多行初始化后,大多数应数应用建立一用建立一个个主窗口。在主窗口。在GTK+GTK+中,主窗口常常被中,主窗口常常被称为顶层称为顶层窗口。窗口。顶层顶层窗口不窗口不被包含在任何其他窗口被包含在任何其他窗口内内,所以,所以它没它没有上有上层层窗口。在窗口。在GTK+GTK+中,中,构构件具有父子件具有父子关关系,其中父系,其中父构构件是容器,而子件是容器,而子构构件件则则是包
3、含在容器中的是包含在容器中的构构件。件。顶层顶层窗口窗口没没有父窗口,但可能成有父窗口,但可能成为为其他其他构构件的容器。件的容器。在在GTK+GTK+中建立中建立构构件分件分两两步:建立步:建立构构件,然后使件,然后使它它可以看得可以看得见见。gtk_window_new()gtk_window_new()函函数负责数负责建立窗口。如表建立窗口。如表18.318.3所示,所示,gtk_widget_show()gtk_widget_show()函函数负责数负责使使它它成成为为可可见见的窗体,如表的窗体,如表18.418.4所示。所示。结束应用程序 窗体程序在创建之后需要进行推出,而窗体程序在
4、创建之后需要进行推出,而gtk_main_quit()gtk_main_quit()函数可以结束程序,它通常函数可以结束程序,它通常在回调函数中被调用。函数具体内容如表在回调函数中被调用。函数具体内容如表18.618.6所示:所示:回调函数由于程序必须能够对用户的操作做出相应,在基于由于程序必须能够对用户的操作做出相应,在基于GUIGUI的程序设计中信号是必要的。移动鼠标,按下按钮,敲入的程序设计中信号是必要的。移动鼠标,按下按钮,敲入正文或者关闭窗口,将给应用软件的回呼函数提供信号。信号可能需要应用软件来加以处理。如:字处理软件有正文或者关闭窗口,将给应用软件的回呼函数提供信号。信号可能需要
5、应用软件来加以处理。如:字处理软件有使字体变黑的按钮。如果用户按下了按钮,就需要调用使字体变黑的程序。与此类型,如果用户关闭了主窗口,使字体变黑的按钮。如果用户按下了按钮,就需要调用使字体变黑的程序。与此类型,如果用户关闭了主窗口,在实际关闭窗口以前要进行某些处理(如保存文件,清除等)。在实际关闭窗口以前要进行某些处理(如保存文件,清除等)。在在GTK+GTK+中经常产生各种信号,多数情况下信号被忽略。以按钮构件为例,应用软件有专门用于按钮的信号。当中经常产生各种信号,多数情况下信号被忽略。以按钮构件为例,应用软件有专门用于按钮的信号。当用户按下鼠标或释放鼠标按钮时,当用户电机鼠标时,或者当鼠
6、标移过按钮或离开按钮时都产生各自的信号。应用户按下鼠标或释放鼠标按钮时,当用户电机鼠标时,或者当鼠标移过按钮或离开按钮时都产生各自的信号。应用程序可以忽略掉一些信号,只对感兴趣的事件加以处理。用程序可以忽略掉一些信号,只对感兴趣的事件加以处理。当需要对信号进行处理时,需要用当需要对信号进行处理时,需要用GTK+GTK+登记回调函数,并将它和构件联系在一起。构件可以登记回调函数,回登记回调函数,并将它和构件联系在一起。构件可以登记回调函数,回调函数可与多个构件联系在一起。调函数可与多个构件联系在一起。g_signal_connect()g_signal_connect()函数用于登记一个函数用于
7、登记一个GTK+GTK+信号,其功能有点像普通信号登记函数信号,其功能有点像普通信号登记函数signal.signal.当某个空间发出信号当某个空间发出信号,程序就会去执行由,程序就会去执行由g_signal_connectg_signal_connect登记的回调函数。函数内容如表登记的回调函数。函数内容如表18.718.7所示所示其它窗体函数gtk_window_set_title()gtk_window_set_title()函函数数可以修改程序的可以修改程序的标题标题。窗口的。窗口的标题会标题会出出现现在在标题栏标题栏中。在中。在X X窗体系窗体系统统中,中,标题栏标题栏被窗体管理器管
8、理,被窗体管理器管理,并并由程序由程序员员指定。指定。标题应该帮标题应该帮助用助用户区户区分分当当前窗体前窗体与与其其它它窗体。窗体。gtk_window_set_title(GTK_WINDOW(window),”MainWindow”);gtk_window_set_title(GTK_WINDOW(window),”MainWindow”);gtk_window_get_resizable()gtk_window_get_resizable()函函数数可以可以获获得窗体的伸得窗体的伸缩属缩属性,系性,系统统默默认认窗体是可伸窗体是可伸缩缩的。的。gtk_window_get_resiza
9、ble()gtk_window_get_resizable()函函数数有一有一个个返回返回值值,如果可以伸,如果可以伸缩为缩为TRUETRUE,如果不可以伸,如果不可以伸缩为缩为FALSEFALSE。gtk_window_set_resizable()gtk_window_set_resizable()函函数数可以修改窗体的伸可以修改窗体的伸缩属缩属性,由第二性,由第二参数参数指定。以上指定。以上两个两个函函数数的具体的具体内内容如表容如表18.1018.10所示:所示:gtk_window_set_resizable(GTK_WINDOW(window),FALSE);gtk_window_
10、set_resizable(GTK_WINDOW(window),FALSE);标题组装盒构件本讲大纲:组组装盒的原理装盒的原理盒的盒的细节细节组组装盒程序装盒程序用表用表组组装装表表组组装程序装程序组装盒的原理但当你想要放置更多的构件到一个窗口中时,如何控制各个构件的定位呢?这时就要用到组装但当你想要放置更多的构件到一个窗口中时,如何控制各个构件的定位呢?这时就要用到组装(Packing)(Packing)了。了。 组装盒的原理多数组装是通过创建一些多数组装是通过创建一些“盒盒(boxes)”(boxes)”来达成的,这是些不可见的构件容器,它们有两种形式:来达成的,这是些不可见的构件容器,
11、它们有两种形式:一种是横向盒一种是横向盒(horizontalbox)(horizontalbox),一种是纵向盒,一种是纵向盒(verticalbox)(verticalbox)。当我们组装构件到横向盒里时,。当我们组装构件到横向盒里时,这些构件就依着我们调用的顺序左至右或右到左水平地插入进去。在纵向盒里,则顶部到底部或这些构件就依着我们调用的顺序左至右或右到左水平地插入进去。在纵向盒里,则顶部到底部或相反地组装构件,你可以使用任意的盒组合,比如盒套盒或者盒挨着盒,用以产生你想要的效果相反地组装构件,你可以使用任意的盒组合,比如盒套盒或者盒挨着盒,用以产生你想要的效果。要创建一个新的横向盒,
12、调用要创建一个新的横向盒,调用gtk_hbox_new()gtk_hbox_new(),对于纵向盒,用,对于纵向盒,用gtk_vbox_new()gtk_vbox_new()。gtk_box_pack_start()gtk_box_pack_start()和和gtk_box_pack_end()gtk_box_pack_end()函数用来将对象组装到这些容器中。函数用来将对象组装到这些容器中。gtk_box_pack_start()gtk_box_pack_start()将对象从上到下组装到纵向盒中,或者左到右组装到横向盒中。将对象从上到下组装到纵向盒中,或者左到右组装到横向盒中。gtk_bo
13、x_pack_end()gtk_box_pack_end()则相反,下到上组装到纵向盒中,或者右到左组装到横向盒中。使用这些则相反,下到上组装到纵向盒中,或者右到左组装到横向盒中。使用这些函数允许我们调整自己的构件向左或向右对齐,同时也可以混入一些其它的方法来达到我们想要函数允许我们调整自己的构件向左或向右对齐,同时也可以混入一些其它的方法来达到我们想要的设计效果。在我们的示例中多数使用的设计效果。在我们的示例中多数使用gtk_box_pack_start()gtk_box_pack_start()。被组装的对象可以是另一个容器。被组装的对象可以是另一个容器或构件。事实上,许多构件本身就是容器
14、,包括按钮,只不过我们通常在按钮中只放入一个标签或构件。事实上,许多构件本身就是容器,包括按钮,只不过我们通常在按钮中只放入一个标签。通过使用这些调用,通过使用这些调用,GTKGTK就会知道要把构件放到哪里去,并且会自动做调整大小及其它美化的事就会知道要把构件放到哪里去,并且会自动做调整大小及其它美化的事情。至于如何组装你的构件这里还有一些选项。正如你能想到的,在放置和创建构件时,这些方情。至于如何组装你的构件这里还有一些选项。正如你能想到的,在放置和创建构件时,这些方法给了我们很多的弹性。法给了我们很多的弹性。盒的细节由于存在这样的弹性,所以在一开始使用由于存在这样的弹性,所以在一开始使用G
15、TKGTK中的组装盒中的组装盒(packingbox)(packingbox)的时候会有点让人迷惑。这里有许多选项的时候会有点让人迷惑。这里有许多选项,并且它们不容易一眼看出是如何组合在一起的。然而到最后,这里基本上只有五种不同的风格。,并且它们不容易一眼看出是如何组合在一起的。然而到最后,这里基本上只有五种不同的风格。每一行包含一个带有若干按钮的横向盒。每一行包含一个带有若干按钮的横向盒。gtk_box_packgtk_box_pack是组装每个按钮到横向盒是组装每个按钮到横向盒(hbox)(hbox)的简写。每个按钮都是以的简写。每个按钮都是以同样的方式组装到横向盒里的(例如,以同样参数调
16、用同样的方式组装到横向盒里的(例如,以同样参数调用gtk_box_pack_start()gtk_box_pack_start()函数)。函数)。这是这是gtk_box_pack_start()gtk_box_pack_start()函数的声明。函数的声明。voidgtk_box_pack_start(GtkBoxvoidgtk_box_pack_start(GtkBox* *box,box,GtkWidgetGtkWidget* *child,child,gbooleanexpand,gbooleanexpand,gbooleanfill,gbooleanfill,guintpadding)
17、;guintpadding);第一个参数是你要把对象组装进去的盒,第二个就是该对象。目前这些对象将都是按钮,即我们要将这些按钮组装第一个参数是你要把对象组装进去的盒,第二个就是该对象。目前这些对象将都是按钮,即我们要将这些按钮组装到盒中。到盒中。gtk_box_pack_start()gtk_box_pack_start()和和gtk_box_pack_end()gtk_box_pack_end()中的中的expandexpand参数是用来控制构件在盒中是充满所有多余空间这样参数是用来控制构件在盒中是充满所有多余空间这样盒会扩展到充满所有分配给它的空间(盒会扩展到充满所有分配给它的空间(TUR
18、ETURE);还是盒收缩到仅仅符合构件的大小();还是盒收缩到仅仅符合构件的大小(FALSEFALSE)。设置)。设置expandexpand为为FALSEFALSE将允许你向左或向右对齐你的构件。否则,它们会在盒中展开,同样的效果只要用将允许你向左或向右对齐你的构件。否则,它们会在盒中展开,同样的效果只要用gkt_box_pack_start()gkt_box_pack_start()或或gtk_box_pack_end()gtk_box_pack_end()之一就能实现。之一就能实现。fillfill参数在参数在gtk_box_packgtk_box_pack中控制多余空间是分配给对象本身
19、(中控制多余空间是分配给对象本身(TRUETRUE),还是让多余空间围绕在这些对象周围分布),还是让多余空间围绕在这些对象周围分布(FALSEFALSE)。它只有在)。它只有在expandexpand参数也为参数也为TRUETRUE时才会生效。时才会生效。组装盒程序用表组装让我们看看另一种组装的方法让我们看看另一种组装的方法- -表表(Tables)(Tables)。在某些情况下这是极其有用的。使用表的时候,我们建立格来放入构件。在某些情况下这是极其有用的。使用表的时候,我们建立格来放入构件。构件可以占满我们所指定的所有空间,第一个要看的,当然是。构件可以占满我们所指定的所有空间,第一个要看的
20、,当然是gtk_table_new()gtk_table_new()这个函数:这个函数:GtkWidgetGtkWidget* *gtk_table_new(guintrows,gtk_table_new(guintrows,guint columns,guint columns,gboolean homogeneous);gboolean homogeneous);第一个参数是表中要安排的行的数量,而第二个,显然,就是列的数量。第一个参数是表中要安排的行的数量,而第二个,显然,就是列的数量。homogeneoushomogeneous参数跟表格框参数跟表格框(tablesboxes)(tab
21、lesboxes)的大小处理有关。如果的大小处理有关。如果homogeneoushomogeneous是是TRUETRUE,所有表格框的大小都,所有表格框的大小都将调整为表中最大构件的大小。如果将调整为表中最大构件的大小。如果homogeneoushomogeneous为为FALSEFALSE,每个表格框将会按照同行中最高的构件,与同列中最,每个表格框将会按照同行中最高的构件,与同列中最宽的构件来定自身的大小。行与列为宽的构件来定自身的大小。行与列为0 0到到n n编号,而编号,而n n是我们在调用是我们在调用gtk_table_newgtk_table_new时所指定的值。时所指定的值。注意
22、坐标系统开始于左上角。要向框中放置一个构件,使用下面的函数:注意坐标系统开始于左上角。要向框中放置一个构件,使用下面的函数:voidgtk_table_attach(GtkTablevoidgtk_table_attach(GtkTable* *table, table, GtkWidget GtkWidget * *child,child,guint left_attach,guint left_attach,guint right_attach,guint right_attach,guint top_attach,guint top_attach,guint bottom_attach,
23、guint bottom_attach,GtkAttachOptions xoptions,GtkAttachOptions xoptions,GtkAttachOptions yoptions,GtkAttachOptions yoptions,guintxpadding,guintxpadding,guintypadding);guintypadding);第一个参数(第一个参数(tabletable)是你已经创建的表,第二个参数()是你已经创建的表,第二个参数(childchild)是你想放进表里的构件。)是你想放进表里的构件。left_attachleft_attach和和right_
24、attachright_attach参数指定构件放置的位置,并使用多少框来放。如果你想在参数指定构件放置的位置,并使用多少框来放。如果你想在2x22x2的表中的右下表项的表中的右下表项(tableentry)(tableentry)处放入一个按钮,并且想让它只充满这个项,则处放入一个按钮,并且想让它只充满这个项,则left_attachleft_attach应该为应该为=1,right_attach=2,top_attach=1,bottom_attach=2=1,right_attach=2,top_attach=1,bottom_attach=2。现在,如果想让一个构件占据我们这个现在,如
25、果想让一个构件占据我们这个2x22x2表的整个顶行,你就用表的整个顶行,你就用left_attach=0,right_attach=2,top_attach=0,bottom_attach=1left_attach=0,right_attach=2,top_attach=0,bottom_attach=1。表组装程序这里创建一个包含一个这里创建一个包含一个2x22x2表的窗口,表中放入三个按钮。前两个按表的窗口,表中放入三个按钮。前两个按钮将放在上面那行里。而第三个,钮将放在上面那行里。而第三个,quitquit按钮,放在下面那行,并占据按钮,放在下面那行,并占据了两列。运行效果如图了两列。运
26、行效果如图18.318.3所示:所示:容器本讲大纲:事件盒事件盒对齐构对齐构件件固定容器固定容器布局容器布局容器框架框架分分栏栏窗口窗口构构件件视视角角滚动滚动窗口窗口按按钮钮盒盒工具工具栏栏笔记笔记本本事件盒 初一看,事件盒构件好像完全没有什么用。它在屏幕上什么初一看,事件盒构件好像完全没有什么用。它在屏幕上什么也不画,并且对事件也不做响应。但是,它有一个功能:为它也不画,并且对事件也不做响应。但是,它有一个功能:为它的子构件提供一个的子构件提供一个X X窗口。因为许多窗口。因为许多GTKGTK构件并没有相关联的构件并没有相关联的X X窗口,所以这一点很重要。虽然没有窗口,所以这一点很重要。
27、虽然没有X X窗口会节省内存,提高系窗口会节省内存,提高系统性能,但它也有一些弱点。没有统性能,但它也有一些弱点。没有X X窗口的构件不能接收事件,窗口的构件不能接收事件,并且对它的任何内容不能实施剪裁。虽然事件盒构件的名称事并且对它的任何内容不能实施剪裁。虽然事件盒构件的名称事件盒强调了它的事件处理功能,它也能用于剪裁构件件盒强调了它的事件处理功能,它也能用于剪裁构件( (更多的信更多的信息请看下面的示例息请看下面的示例) )。用以下函数创建一个新的事件盒构件:。用以下函数创建一个新的事件盒构件:GtkWidgetGtkWidget* *gtk_event_box_new(void);gtk
28、_event_box_new(void);然后子构件就可以添加到这个事件盒里面:然后子构件就可以添加到这个事件盒里面:gtk_container_add(GTK_CONTAINER(event_box),child_wigtk_container_add(GTK_CONTAINER(event_box),child_widget);dget);对齐构件对齐对齐(alignment)(alignment)构件允许将一个构件放在相对于对齐构件窗口的某个位置和尺寸上。例如构件允许将一个构件放在相对于对齐构件窗口的某个位置和尺寸上。例如将一个构件放在窗口的正中间时,就要使用对齐构件。只有如下两个函数与
29、对齐构件相关,将一个构件放在窗口的正中间时,就要使用对齐构件。只有如下两个函数与对齐构件相关,第一个函数用指定的参数创建新的对齐构件。第二个函数用于改变对齐构件的参数。第一个函数用指定的参数创建新的对齐构件。第二个函数用于改变对齐构件的参数。GtkWidgetGtkWidget* *gtk_alignment_new(gfloatxalign,gtk_alignment_new(gfloatxalign,gfloatyalign,gfloatyalign,gfloatxscale,gfloatxscale,gfloatyscale);gfloatyscale);voidgtk_alignmen
30、t_set(GtkAlignmentvoidgtk_alignment_set(GtkAlignment* *alignment,alignment,gfloatxalign,gfloatxalign,gfloatyalign,gfloatyalign,gfloatxscale,gfloatxscale,gfloatyscale);gfloatyscale);上面函数的所有四个参数都是介于上面函数的所有四个参数都是介于0.00.0与与1.01.0间的浮点数。间的浮点数。xalignxalign和和yalignyalign参数影响放在对齐参数影响放在对齐构件里的构件的位置。构件里的构件的位置。x
31、scalexscale和和yscaleyscale参数影响分配给构件的空间总数。参数影响分配给构件的空间总数。可以用下面的函数将子构件添加到对齐构件中:可以用下面的函数将子构件添加到对齐构件中:gtk_container_add(GTK_CONTAINER(alignment),child_widget);gtk_container_add(GTK_CONTAINER(alignment),child_widget);固定容器固定容器固定容器(TheFixedcontainer)(TheFixedcontainer)允许将构件放在窗口的固定位置,这允许将构件放在窗口的固定位置,这个位置是相对于
32、固定容器的左上角的。构件的位置可以动态改变。只个位置是相对于固定容器的左上角的。构件的位置可以动态改变。只有少数几个与固定容器构件相关的函数:有少数几个与固定容器构件相关的函数:gtk_fixed_new()gtk_fixed_new()函函数数用于用于创创建新的固定容器。建新的固定容器。gtk_fixed_put()gtk_fixed_put()函函数将数将widgetwidget放在放在fixedfixed的的x x和和y y指定的位置。指定的位置。gtk_fixed_move()gtk_fixed_move()函函数将数将指定指定构构件移件移动动到新位置。到新位置。voidgtk_fix
33、ed_set_has_window(GtkFixedvoidgtk_fixed_set_has_window(GtkFixed* *fixed,gbooleanhas_fixed,gbooleanhas_window);window);gbooleangtk_fixed_get_has_window(GtkFixedgbooleangtk_fixed_get_has_window(GtkFixed* *fixed);fixed);通常,固定容器没有它们自己的通常,固定容器没有它们自己的X X窗口。由于这点在早期版本的窗口。由于这点在早期版本的GTKGTK中是不同的中是不同的gtk_fixed_
34、set_has_window()gtk_fixed_set_has_window()函数可以使创建的固定容器有它们自函数可以使创建的固定容器有它们自己的窗口。这个必须在构件实例化己的窗口。这个必须在构件实例化(realizing)(realizing)之前调用。下面的来看之前调用。下面的来看一下怎样使用固定容器。运行效果如图一下怎样使用固定容器。运行效果如图18.418.4所示:所示:布局容器布局容器布局容器(TheLayoutcontainer)(TheLayoutcontainer)与固定容器与固定容器(theFixedcontainer)(theFixedcontainer)类似,不过它
35、可以在一个类似,不过它可以在一个无限的滚动区域定位构件无限的滚动区域定位构件 ( (其实也不能大于其实也不能大于232232像素像素) )。在。在X X系统中,窗口的宽度和高度只系统中,窗口的宽度和高度只能限于在能限于在3276732767像素以你。布局容器构件使用一些特殊的技巧像素以你。布局容器构件使用一些特殊的技巧(doingsomeexoticstuffusingwindowandbitgravities)(doingsomeexoticstuffusingwindowandbitgravities)越过这种限制。所以,即使在滚动越过这种限制。所以,即使在滚动区域你有很多子构件,也可以平
36、滑地滚动。用以下函数创建布局容器:区域你有很多子构件,也可以平滑地滚动。用以下函数创建布局容器:GtkWidgetGtkWidget* *gtk_layout_new(GtkAdjustmentgtk_layout_new(GtkAdjustment* *hadjustment, hadjustment, GtkAdjustmentGtkAdjustment* *vadjustment);vadjustment);可以看到,你可以有选择地指定布局容器滚动时要使用的调整对象。可以用下面的两个函可以看到,你可以有选择地指定布局容器滚动时要使用的调整对象。可以用下面的两个函数在布局容器构件你添加和移
37、动构件。数在布局容器构件你添加和移动构件。voidgtk_layout_put(GtkLayoutvoidgtk_layout_put(GtkLayout* *layout, GtkWidgetlayout, GtkWidget* *widget, gintx, ginty); widget, gintx, ginty); voidgtk_layout_move(GtkLayoutvoidgtk_layout_move(GtkLayout* *layout, GtkWidgetlayout, GtkWidget* *widget, gintx, ginty); widget, gintx, g
38、inty); 布局容器构件的尺寸可以用接下来的这个函数指定:布局容器构件的尺寸可以用接下来的这个函数指定:voidgtk_layout_set_size(GtkLayoutvoidgtk_layout_set_size(GtkLayout* *layout, guintwidth, guintheight); layout, guintwidth, guintheight); 最后最后4 4个函数用于操纵垂直和水平的调整对象。个函数用于操纵垂直和水平的调整对象。 GtkAdjustmentGtkAdjustment* *gtk_layout_get_hadjustment(GtkLayoutg
39、tk_layout_get_hadjustment(GtkLayout* *layout); layout); GtkAdjustmentGtkAdjustment* *gtk_layout_get_vadjustment(GtkLayoutgtk_layout_get_vadjustment(GtkLayout* *layout); layout); voidgtk_layout_set_hadjustment(GtkLayoutvoidgtk_layout_set_hadjustment(GtkLayout* *layout, GtkAdjustmentlayout, GtkAdjustm
40、ent* *adjustment); adjustment); voidgtk_layout_set_vadjustment(GtkLayoutvoidgtk_layout_set_vadjustment(GtkLayout* *layout, GtkAdjustmentlayout, GtkAdjustment* *adjustment);adjustment);框架框架框架(Frames)(Frames)可以用于在盒子中封装一个或一组构件,框架本身还可以有一个标签可以用于在盒子中封装一个或一组构件,框架本身还可以有一个标签。标签的位置和盒子的风格可以灵活改变。标签的位置和盒子的风格可以灵活
41、改变。 框架可以用下面的函数创建:框架可以用下面的函数创建: GtkWidgetGtkWidget* *gtk_frame_new(constgchargtk_frame_new(constgchar* *label); label); 标签缺省放在框架的左上角。传标签缺省放在框架的左上角。传递递NULLNULL值作为值作为labellabel参数时,框架不显示标签。标签文本可以用下面的函数改变。参数时,框架不显示标签。标签文本可以用下面的函数改变。 voidgtk_frame_set_label(GtkFramevoidgtk_frame_set_label(GtkFrame* *frame
42、, constgcharframe, constgchar* *label); label); 标签的位置可标签的位置可以用下面的函数改变:以用下面的函数改变: voidgtk_frame_set_label_align(GtkFramevoidgtk_frame_set_label_align(GtkFrame* *frame, frame, gfloatxalign, gfloatyalign); xaligngfloatxalign, gfloatyalign); xalign和和yalignyalign参数取值范围介于参数取值范围介于0.00.0和和1.01.0之间。之间。xalign
43、xalign指定标签在框架构件上部水平线上的位置。指定标签在框架构件上部水平线上的位置。yalignyalign目前还没有被使用。目前还没有被使用。xalignxalign的缺省值是的缺省值是0.00.0,它将标签放在框架构件的最左端。,它将标签放在框架构件的最左端。下面的函数改变盒子的风格,用于显示框架的轮廓。下面的函数改变盒子的风格,用于显示框架的轮廓。voidgtk_frame_set_shadow_type(GtkFramevoidgtk_frame_set_shadow_type(GtkFrame* *frame, GtkShadowTypetype); frame, GtkShad
44、owTypetype); typetype参数参数可以取以下可以取以下值值之一:之一:GTK_SHADOW_NONE GTK_SHADOW_NONE GTK_SHADOW_IN GTK_SHADOW_IN GTK_SHADOW_OUT GTK_SHADOW_OUT GTK_SHADOW_ETCHED_IN(GTK_SHADOW_ETCHED_IN(缺省缺省值值) ) GTK_SHADOW_ETCHED_OUT GTK_SHADOW_ETCHED_OUT 下面的代码就是如何构建一个框架。下面的代码就是如何构建一个框架。分栏窗口构件如果想要将一个窗口分成两个部分,可以使用分栏窗口构件如果想要将一个
45、窗口分成两个部分,可以使用分栏窗口构件(Thepanedwindowwidgets)(Thepanedwindowwidgets)。窗口两部分的尺寸用户控制,它们。窗口两部分的尺寸用户控制,它们之间有一个凹槽,上面有一个手柄,用户可以拖动此手柄改变两之间有一个凹槽,上面有一个手柄,用户可以拖动此手柄改变两部分的比例。窗口划分可以是水平部分的比例。窗口划分可以是水平(HPaned) (HPaned) 或垂直的或垂直的(VPaned)(VPaned)。 用以下函数之一创建一个新的分栏窗口:用以下函数之一创建一个新的分栏窗口: GtkWidgetGtkWidget* *gtk_hpaned_new(
46、void); gtk_hpaned_new(void); GtkWidgetGtkWidget* *gtk_vpaned_new(void); gtk_vpaned_new(void); 创建了分栏窗口构件后,可以在它的两边添加子构件。用下面的创建了分栏窗口构件后,可以在它的两边添加子构件。用下面的函数完成:函数完成:voidgtk_paned_add1(GtkPanedvoidgtk_paned_add1(GtkPaned* *paned,GtkWidgetpaned,GtkWidget* *child); child); voidgtk_paned_add2(GtkPanedvoidgtk
47、_paned_add2(GtkPaned* *paned,GtkWidgetpaned,GtkWidget* *child); child); gtk_paned_add1()gtk_paned_add1()函函数将数将子子构构件添加到分件添加到分栏栏窗口的左窗口的左边边或或顶顶部。部。gtk_paned_add2()gtk_paned_add2()函函数将数将子子构构件添加到分件添加到分栏栏窗口的右窗口的右边边或下部。或下部。 视角一般很少直接使用视角一般很少直接使用视角(Viewport)(Viewport)构件。多数情况下是使用滚动窗口构件,它内部使构件。多数情况下是使用滚动窗口构件,它
48、内部使用了视角。视角构件允许在其中放置一个超过自身大小的构件,这样你可以一次看构用了视角。视角构件允许在其中放置一个超过自身大小的构件,这样你可以一次看构件的一部分。它用调整对象定义当前显示的区域。件的一部分。它用调整对象定义当前显示的区域。 用下面的函数创建一个视角。用下面的函数创建一个视角。GtkWidgetGtkWidget* *gtk_viewport_new(GtkAdjustmentgtk_viewport_new(GtkAdjustment* *hadjustment, hadjustment, GtkAdjustmentGtkAdjustment* *vadjustment);
49、 vadjustment); 可以看到,创建构件时能够指定构件使用的水平和垂直调整对象。如果给函数传递可以看到,创建构件时能够指定构件使用的水平和垂直调整对象。如果给函数传递NULLNULL参数,构件会自己创建调整对象。参数,构件会自己创建调整对象。 创建构件后,可以用下面四个函数取得和设创建构件后,可以用下面四个函数取得和设置它的调整对象:置它的调整对象: GtkAdjustmentGtkAdjustment* *gtk_viewport_get_hadjustment(GtkViewportgtk_viewport_get_hadjustment(GtkViewport* *viewpor
50、t); viewport); GtkAdjustmentGtkAdjustment* *gtk_viewport_get_vadjustment(GtkViewportgtk_viewport_get_vadjustment(GtkViewport* *viewport); viewport); voidgtk_viewport_set_hadjustment(GtkViewportvoidgtk_viewport_set_hadjustment(GtkViewport* *viewport, viewport, GtkAdjustmentGtkAdjustment* *adjustment)
51、; adjustment); voidgtk_viewport_set_vadjustment(GtkViewportvoidgtk_viewport_set_vadjustment(GtkViewport* *viewport, viewport, GtkAdjustmentGtkAdjustment* *adjustment); adjustment); 剩下的这个函数用于改变视角的外观:剩下的这个函数用于改变视角的外观:voidgtk_viewport_set_shadow_type(GtkViewportvoidgtk_viewport_set_shadow_type(GtkViewp
52、ort* *viewport, viewport, GtkShadowTypetype); GtkShadowTypetype); typetype参数参数可以取以下可以取以下值值:GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUTGTK_SHADOW_OUT, GTK_SHADOW_ETCHED_IN, GTK_SHADOW_ETCHED_OUT。滚动窗口滚动窗口滚动窗口(Scrolledwindo
53、ws)(Scrolledwindows)用于创建一个可滚动区域,并将其它构件放入其中。可用于创建一个可滚动区域,并将其它构件放入其中。可以在滚动窗口中插入任何其它构件,在其内部的构件不论尺寸大小都可以通过滚动条以在滚动窗口中插入任何其它构件,在其内部的构件不论尺寸大小都可以通过滚动条访问到。访问到。 用下面的函数创建新的滚动窗口。用下面的函数创建新的滚动窗口。GtkWidgetGtkWidget* *gtk_scrolled_window_new(GtkAdjustmentgtk_scrolled_window_new(GtkAdjustment* *hadjustment, hadjustm
54、ent, GtkAdjustmentGtkAdjustment* *vadjustment); vadjustment); 第一个参数是水平方向的调整对象,第二个参数是垂直方向的调整对象。它们一般都第一个参数是水平方向的调整对象,第二个参数是垂直方向的调整对象。它们一般都设置为设置为NULLNULL。voidgtk_scrolled_window_set_policy(GtkScrolledWindowvoidgtk_scrolled_window_set_policy(GtkScrolledWindow* *scrolled_window,Gtscrolled_window,GtkPolic
55、yTypehscrollbar_policy, GtkPolicyTypevscrollbar_policy); kPolicyTypehscrollbar_policy, GtkPolicyTypevscrollbar_policy); 这个函数可以设置滚动条出现的方式。第一个参数是要设置的滚动窗口,第二个设置这个函数可以设置滚动条出现的方式。第一个参数是要设置的滚动窗口,第二个设置水平滚动条出现的方式,第三个参数设置垂直滚动条出现的方式。水平滚动条出现的方式,第三个参数设置垂直滚动条出现的方式。 滚动条的方式取值滚动条的方式取值可以为可以为GTK_POLICY_AUTOMATICGTK_P
56、OLICY_AUTOMATIC或或GTK_POLICY_ALWAYSGTK_POLICY_ALWAYS。当要求滚动条根据需。当要求滚动条根据需要自动出现时,可设为要自动出现时,可设为GTK_POLICY_AUTOMATICGTK_POLICY_AUTOMATIC;若设为;若设为GTK_POLICY_ALWAYSGTK_POLICY_ALWAYS,滚动条会一直出现在滚动窗口上。,滚动条会一直出现在滚动窗口上。 可以用下面的函数将构件放到滚动窗口里:可以用下面的函数将构件放到滚动窗口里:voidgtk_scrolled_window_add_with_viewport(GtkScrolledWin
57、dowvoidgtk_scrolled_window_add_with_viewport(GtkScrolledWindow* *scrolled_wiscrolled_window,GtkWidgetndow,GtkWidget* *child); child); 下面是一个简单示例:在滚动窗口构件中放置一个表格构件,并在表格中放下面是一个简单示例:在滚动窗口构件中放置一个表格构件,并在表格中放100100个开个开关按钮。关按钮。 按钮盒按钮盒按钮盒(ButtonBoxes)(ButtonBoxes)可以很方便地快速布置一组按钮。它有可以很方便地快速布置一组按钮。它有水平和垂直两种样式。可以
58、用以下函数创建水平或垂直按钮水平和垂直两种样式。可以用以下函数创建水平或垂直按钮盒:盒:GtkWidgetGtkWidget* *gtk_hbutton_box_new(void); gtk_hbutton_box_new(void); GtkWidgetGtkWidget* *gtk_vbutton_box_new(void); gtk_vbutton_box_new(void); 将按钮添加到按钮盒中可以用下面这个通常的函数:将按钮添加到按钮盒中可以用下面这个通常的函数:gtk_container_add(GTK_CONTAINER(button_box),child_gtk_contai
59、ner_add(GTK_CONTAINER(button_box),child_widget);widget);下面的示例演示了按钮盒的不同布局设置。下面的示例演示了按钮盒的不同布局设置。工具栏工具栏工具栏(Toolbars)(Toolbars)常用来将一些构件分组,这样能够简化定制它们的外观和布局。典型情况下工常用来将一些构件分组,这样能够简化定制它们的外观和布局。典型情况下工具栏带图标和标签以及工具提示的按钮组成,不过,其它构件也可以放在工具栏里面。最后,各具栏带图标和标签以及工具提示的按钮组成,不过,其它构件也可以放在工具栏里面。最后,各工具栏组件可以水平或垂直排列,还可以显示图标或标签
60、,或者两者都显示。工具栏组件可以水平或垂直排列,还可以显示图标或标签,或者两者都显示。 用下面的函数创建用下面的函数创建一个工具栏(可能有些人已经猜到了):一个工具栏(可能有些人已经猜到了): GtkWidgetGtkWidget* *gtk_toolbar_new(void); gtk_toolbar_new(void); 创建工具栏以后创建工具栏以后,可以向其中追加、前插和插入工具栏项(这里意指简单文本字符串)或元素(这里意指任何构,可以向其中追加、前插和插入工具栏项(这里意指简单文本字符串)或元素(这里意指任何构件类型)。件类型)。要想描述一个工具栏上的对象,需要一个标签文本、一个工具提
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025租赁合同模板示例
- 《儿科国考复习资料》课件
- 2025河畔土地租赁投资合同样本
- 2025有关技术授权合同的范本
- 白酒代理商合同协议范本
- 瑜伽卡转让会员合同协议
- 物资采购单价合同协议
- 独立别墅买卖合同协议
- 监测系统销售合同协议
- 电商营销中心合同协议
- 2025年第三届天扬杯建筑业财税知识竞赛题库附答案(201-300题)
- 2025-2030中国电动车行业发展分析及投资前景与战略规划研究报告
- 2025租赁合同(办公室)中文版英文版
- T-NKFA 015-2024 中小学午休课桌椅
- 2025春新七年级道德与法治下册全册知识点
- Unit 9 Active learning 教学设计-2023-2024学年高中英语北师大版(2019)必修第三册
- 渔场基地建设实施方案
- 2025上海无固定期限劳动合同范本
- 城市道路养护雨季应对措施
- 中职高教版(2023)语文职业模块-第五单元:走近大国工匠(一)展示国家工程-了解工匠贡献【课件】
- 《食源性病原体》课件
评论
0/150
提交评论