当前位置:Linux教程 - Linux - GTK入门导读(物件概论)

GTK入门导读(物件概论)



         5. 物件概论

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

    gtk_*_new - 最普遍产生物件的函数.
    连接信号到信号处理器.
    设定物件属性.
    要将物件包装到一个container可用gtk_container_add()或gtk_box_pack_start().
    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里面找到.

    发布人:netbull 来自:Linux开发指南