Linux 版 (精华区)

发信人: netiscpu (平淡是真), 信区: Linux
标  题: GTK入门导引(5)
发信站: 紫 丁 香 (Mon Dec 14 14:39:35 1998), 转信


发信人: hey (吟风·悠游98), 信区: Unix
标  题: GTK入门导引(5)
发信站: 华南网木棉站 (Tue Nov 10 10:47:09 1998), 转信

5. 物件概论

在GTK下,一般产生物件的步骤为: 

   1.gtk_*_new - 最普遍产生物件的函数. 
   2.连接信号到信号处理器. 
   3.设定物件属性. 
   4.要将物件包装到一个container可用gtk_container_add()或
    gtk_box_pack_start(). 
   5.gtk_widget_show(). 

gtk_widget_show()让GTK知道我们已经完成设定的工作, 并且已经准备好要
显示. 您也可以用gtk_widget_hide来隐藏它. 显示物件的顺序并不太重要, 但我
建议最后才显示, 这样才不会看到这些视窗们一个一个被画出来. 子物件在使
用gtk_widget_show使视窗出现之前是不会被显示出来的. 

5.1 分派系统 

再继续下去您会发现, GTK使用一种分派系统. 一般是用巨集来完成. 您可以看
到诸如以下: 

    GTK_WIDGET(widget) 
    GTK_OBJECT(object) 
    GTK_SIGNAL_FUNC(function) 
    GTK_CONTAINER(container) 
    GTK_WINDOW(window) 
    GTK_BOX(box) 

这些在函数中的都是分派参数. 您可以在范例中看到, 而且只要看到该函数就
会知道它们是做什么用的. 

从以下的组织图来看, 所有GtkWidgets都是由GtkObject而来. 这意味著您可
以在任何地方, 透过GTK_OBJECT()巨集要求一个物件. 

例如: 

    gtk_signal_connect(GTK_OBJECT(button), "clicked",
                       GTK_SIGNAL_FUNC(callback_function), callback_data);

这样分派一个按钮给一个物件, 并且提供一个指标给callback函数. 

许多物件同时也是containers. 如果您看看以下的组织图, 您会看到许多物件由
GtkContainer而来 所有这一类的物件都可以用GTK_CONTAINER巨集产生
使用containers. 

5.2 物件组织图 

这里是一些参考, 物件组织图. 

        GtkObject
        +-- GtkData
        |   \-- GtkAdjustment
        |
        \-- GtkWidget
            +-- GtkContainer
            |   +-- GtkBin
            |   |   +-- GtkAlignment
            |   |   +-- GtkFrame
            |   |   |   *-- GtkAspectFrame
            |   |   |
            |   |   +-- GtkItem
            |   |   |   +-- GtkListItem
            |   |   |   +-- GtkMenuItem
            |   |   |   |   +-- GtkCheckMenuItem
            |   |   |   |       *-- GtkRadioMenuItem
            |   |   |   |
            |   |   |   *-- GtkTreeItem
            |   |   |
            |   |   +-- GtkViewport
            |   |   \-- GtkWindow
            |   |       +-- GtkDialog
            |   |       \-- GtkFileSelection
            |   |
            |   +-- GtkBox
            |   |   +-- GtkHBox
            |   |   \-- GtkVBox
            |   |       +-- GtkColorSelection
            |   |       \-- GtkCurve
            |   |
            |   +-- GtkButton
            |   |   +-- GtkOptionMenu
            |   |   \-- GtkToggleButton
            |   |       \-- GtkCheckButton
            |   |           \-- GtkRadioButton
            |   |
            |   +-- GtkList
            |   +-- GtkMenuShell
            |   |   +-- GtkMenu
            |   |   \-- GtkMenuBar
            |   |
            |   +-- GtkNotebook
            |   +-- GtkScrolledWindow
            |   +-- GtkTable
            |   \-- GtkTree
            |
            +-- GtkDrawingArea
            +-- GtkEntry
            +-- GtkMisc
            |   +-- GtkArrow
            |   +-- GtkImage
            |   +-- GtkLabel
            |   \-- GtkPixmap
            |
            +-- GtkPreview
            +-- GtkProgressBar
            +-- GtkRange
            |   +-- GtkScale
            |   |   +-- GtkHScale
            |   |   \-- GtkVScale
            |   |
            |   \-- GtkScrollbar
            |       +-- GtkHScrollbar
            |       \-- GtkVScrollbar
            |
            +-- GtkRuler
            |   +-- GtkHRuler
            |   \-- GtkVRuler
            |
            \-- GtkSeparator
                +-- GtkHSeparator
                \-- GtkVSeparator

5.3 没有视窗的物件 

以下的物件跟视窗没有关系. 如果您希望接取它们的事件, 您需要使用
GtkEventBox. 请见 EventBox物件

    GtkAlignment
    GtkArrow
    GtkBin
    GtkBox
    GtkImage
    GtkItem
    GtkLabel
    GtkPaned
    GtkPixmap
    GtkScrolledWindow
    GtkSeparator
    GtkTable
    GtkViewport
    GtkAspectFrame
    GtkFrame
    GtkVPaned
    GtkHPaned
    GtkVBox
    GtkHBox
    GtkVSeparator
    GtkHSeparator

再过来我们会一个一个物件来示范如何产生及显示. 一个很好的范例是
testgtk.c, 您可以在gtk/testgtk.c里面找到. 

--
        6m3m┌───────────────────────┐0m
        6m3m│     4m疾如风,徐如林,侵掠如火,不动如山       3m│4m 0m
        6m3m└───────────────────────┘0m4m 0m
          4m                                                 0m

m;32m※ 来源:.华南网木棉站 bbs.gznet.edu.cn.[FROM: 202.38.212.66]m
--
m;32m※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: mtlab.hit.edu.cn]
--

                              Enjoy Linux!
                          -----It's FREE!-----

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.469毫秒