您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 《LinuxC从入门到精通》明日科技第17章界面构件开发
窗体本讲大纲:初始化建立窗口结束应用程序回调函数其它窗体函数初始化无论写哪一个GTK+程序需要调用gtk_init函数对GTK+库函数进行初始化。gtk_init()函数的具体介绍如下表18.1所示:名称::gtk_init功能:初始化GTK+库头文件:#includegtk/gtk.h函数原形:voidgtk_init(int*argc,char***argv);参数:argc指向主函数argc的指针argv指向主函数argv的指针返回值:无建立窗口名称::gtk_window_new功能:建立窗口头文件:#includegtk/gtk.h函数原形:GtkWidget*gtk_window_new(参数:无返回值:无名称::gtk_widget_show功能:显示窗口头文件:#includegtk/gtk.h函数原形:gtk_widget_show(GtkWidget*window)参数:无返回值:无GTK+的构件是GUI的组成部分。窗口、检查框、按钮和编辑字段都属于构件。通常将构件和窗口定义为指向GtkWidget结构的指针。在GTK+中,GtkWidget是用于所有构件和窗口的通用数据类型。GTK+库进行初始化后,大多数应用建立一个主窗口。在GTK+中,主窗口常常被称为顶层窗口。顶层窗口不被包含在任何其他窗口内,所以它没有上层窗口。在GTK+中,构件具有父子关系,其中父构件是容器,而子构件则是包含在容器中的构件。顶层窗口没有父窗口,但可能成为其他构件的容器。在GTK+中建立构件分两步:建立构件,然后使它可以看得见。gtk_window_new()函数负责建立窗口。如表18.3所示,gtk_widget_show()函数负责使它成为可见的窗体,如表18.4所示。名称::gtk_main功能:等待事件的发生头文件:#includegtk/gtk.h函数原形:voidgtk_main(void);参数:无返回值:无结束应用程序窗体程序在创建之后需要进行推出,而gtk_main_quit()函数可以结束程序,它通常在回调函数中被调用。函数具体内容如表18.6所示:名称::gtk_main_quit功能:结束应用程序头文件:#includegtk/gtk.h函数原形:voidgtk_main_quit(void);参数:无返回值:无回调函数由于程序必须能够对用户的操作做出相应,在基于GUI的程序设计中信号是必要的。移动鼠标,按下按钮,敲入正文或者关闭窗口,将给应用软件的回呼函数提供信号。信号可能需要应用软件来加以处理。如:字处理软件有使字体变黑的按钮。如果用户按下了按钮,就需要调用使字体变黑的程序。与此类型,如果用户关闭了主窗口,在实际关闭窗口以前要进行某些处理(如保存文件,清除等)。在GTK+中经常产生各种信号,多数情况下信号被忽略。以按钮构件为例,应用软件有专门用于按钮的信号。当用户按下鼠标或释放鼠标按钮时,当用户电机鼠标时,或者当鼠标移过按钮或离开按钮时都产生各自的信号。应用程序可以忽略掉一些信号,只对感兴趣的事件加以处理。当需要对信号进行处理时,需要用GTK+登记回调函数,并将它和构件联系在一起。构件可以登记回调函数,回调函数可与多个构件联系在一起。g_signal_connect()函数用于登记一个GTK+信号,其功能有点像普通信号登记函数signal.当某个空间发出信号,程序就会去执行由g_signal_connect登记的回调函数。函数内容如表18.7所示名称::g_signal_connect功能:信号登记函数头文件:#includegtk/gtk.h函数原形:gulongg_signal_connect(gpointer*object,constgchar*name,GCallbackfunc,gpointerdata);参数:object发出信号的控件name信号名称func回调函数(对信号要采取的动作)data传给回调函数的数据返回值:其它窗体函数gtk_window_set_title()函数可以修改程序的标题。窗口的标题会出现在标题栏中。在X窗体系统中,标题栏被窗体管理器管理,并由程序员指定。标题应该帮助用户区分当前窗体与其它窗体。gtk_window_set_title(GTK_WINDOW(window),”MainWindow”);gtk_window_get_resizable()函数可以获得窗体的伸缩属性,系统默认窗体是可伸缩的。gtk_window_get_resizable()函数有一个返回值,如果可以伸缩为TRUE,如果不可以伸缩为FALSE。gtk_window_set_resizable()函数可以修改窗体的伸缩属性,由第二参数指定。以上两个函数的具体内容如表18.10所示:gtk_window_set_resizable(GTK_WINDOW(window),FALSE);标题组装盒构件本讲大纲:组装盒的原理盒的细节组装盒程序用表组装表组装程序组装盒的原理但当你想要放置更多的构件到一个窗口中时,如何控制各个构件的定位呢?这时就要用到组装(Packing)了。组装盒的原理多数组装是通过创建一些“盒(boxes)”来达成的,这是些不可见的构件容器,它们有两种形式:一种是横向盒(horizontalbox),一种是纵向盒(verticalbox)。当我们组装构件到横向盒里时,这些构件就依着我们调用的顺序左至右或右到左水平地插入进去。在纵向盒里,则顶部到底部或相反地组装构件,你可以使用任意的盒组合,比如盒套盒或者盒挨着盒,用以产生你想要的效果。要创建一个新的横向盒,调用gtk_hbox_new(),对于纵向盒,用gtk_vbox_new()。gtk_box_pack_start()和gtk_box_pack_end()函数用来将对象组装到这些容器中。gtk_box_pack_start()将对象从上到下组装到纵向盒中,或者左到右组装到横向盒中。gtk_box_pack_end()则相反,下到上组装到纵向盒中,或者右到左组装到横向盒中。使用这些函数允许我们调整自己的构件向左或向右对齐,同时也可以混入一些其它的方法来达到我们想要的设计效果。在我们的示例中多数使用gtk_box_pack_start()。被组装的对象可以是另一个容器或构件。事实上,许多构件本身就是容器,包括按钮,只不过我们通常在按钮中只放入一个标签。通过使用这些调用,GTK就会知道要把构件放到哪里去,并且会自动做调整大小及其它美化的事情。至于如何组装你的构件这里还有一些选项。正如你能想到的,在放置和创建构件时,这些方法给了我们很多的弹性。盒的细节由于存在这样的弹性,所以在一开始使用GTK中的组装盒(packingbox)的时候会有点让人迷惑。这里有许多选项,并且它们不容易一眼看出是如何组合在一起的。然而到最后,这里基本上只有五种不同的风格。每一行包含一个带有若干按钮的横向盒。gtk_box_pack是组装每个按钮到横向盒(hbox)的简写。每个按钮都是以同样的方式组装到横向盒里的(例如,以同样参数调用gtk_box_pack_start()函数)。这是gtk_box_pack_start()函数的声明。voidgtk_box_pack_start(GtkBox*box,GtkWidget*child,gbooleanexpand,gbooleanfill,guintpadding);第一个参数是你要把对象组装进去的盒,第二个就是该对象。目前这些对象将都是按钮,即我们要将这些按钮组装到盒中。gtk_box_pack_start()和gtk_box_pack_end()中的expand参数是用来控制构件在盒中是充满所有多余空间这样盒会扩展到充满所有分配给它的空间(TURE);还是盒收缩到仅仅符合构件的大小(FALSE)。设置expand为FALSE将允许你向左或向右对齐你的构件。否则,它们会在盒中展开,同样的效果只要用gkt_box_pack_start()或gtk_box_pack_end()之一就能实现。fill参数在gtk_box_pack中控制多余空间是分配给对象本身(TRUE),还是让多余空间围绕在这些对象周围分布(FALSE)。它只有在expand参数也为TRUE时才会生效。组装盒程序用表组装让我们看看另一种组装的方法-表(Tables)。在某些情况下这是极其有用的。使用表的时候,我们建立格来放入构件。构件可以占满我们所指定的所有空间,第一个要看的,当然是gtk_table_new()这个函数:GtkWidget*gtk_table_new(guintrows,guintcolumns,gbooleanhomogeneous);第一个参数是表中要安排的行的数量,而第二个,显然,就是列的数量。homogeneous参数跟表格框(table'sboxes)的大小处理有关。如果homogeneous是TRUE,所有表格框的大小都将调整为表中最大构件的大小。如果homogeneous为FALSE,每个表格框将会按照同行中最高的构件,与同列中最宽的构件来定自身的大小。行与列为0到n编号,而n是我们在调用gtk_table_new时所指定的值。注意坐标系统开始于左上角。要向框中放置一个构件,使用下面的函数:voidgtk_table_attach(GtkTable*table,GtkWidget*child,guintleft_attach,guintright_attach,guinttop_attach,guintbottom_attach,GtkAttachOptionsxoptions,GtkAttachOptionsyoptions,guintxpadding,guintypadding);第一个参数(table)是你已经创建的表,第二个参数(child)是你想放进表里的构件。left_attach和right_attach参数指定构件放置的位置,并使用多少框来放。如果你想在2x2的表中的右下表项(tableentry)处放入一个按钮,并且想让它只充满这个项,则left_attach应该为=1,right_attach=2,top_attach=1,bottom_attach=2。现在,如果想让一个构件占据我们这个2x2表的整个顶行,你就用left_attach=0,right_attach=2,top_attach=0,bottom_attach=1。表组装程序这里创建一个包含一个2x2表的窗口,表中放入三个按钮。前两个按钮将放在上面那行里。而第三个,quit按钮,放在下面那行,并占据了两列。运行效果如图18.3所示:容器本讲大纲:事件盒对齐构件固定容器布局容器框架分栏窗口构件视角滚动窗口按钮盒工具栏笔记本事件盒初一看,事件盒构件好像完全没有什么用。它在屏幕上什么也不画,并且对事件也不做响应。但是,它有一个功能:为它的子构件提供一个X窗口。因为许多GTK构件并没有相关联的X窗口,所以这一点很重要。虽然没有X窗口会节省内存,提高系统性能,但它也有一些弱点。没有X窗口的构件不能接收事件,并且对它的任何内容不能实施剪裁。虽然事件盒构件的名称事件盒强调了它的事件处理功能,它也能用于剪裁构件(更多的信息请看下面的示例)。用以下函数创建一个新的事件盒构件:GtkWidget*gtk_event_box_new(void);然后子构件就可以添加到这个事件盒里面:gtk_container_add(GTK_CONTAINER(event_box),child_widget);对齐构件对齐(alignment)构件允许将一个构件放在相对于对齐构件窗口的某个位置和尺寸上。例如将一个构件放在窗口的正中间时,就要使用对齐构件。只有如下两个函数与对齐构件相关,第一个函数用指定的参数创建新的对齐构件。第二个函数用于改变对齐构件的参数。GtkWidget*gtk_alignment_new(gfloatxali
本文标题:《LinuxC从入门到精通》明日科技第17章界面构件开发
链接地址:https://www.777doc.com/doc-2836008 .html