📄 gtk_tut-5.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Draft//EN"><HTML><HEAD><meta http-equiv="pragma" content="no-cache"><TITLE>GTK导引: 物件概论</TITLE></HEAD><BODY><A HREF="gtk_tut-4.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-4.html"><IMG SRC="prev.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/prev.gif" ALT="Previous"></A><A HREF="gtk_tut-6.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-6.html"><IMG SRC="next.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/next.gif" ALT="Next"></A><A HREF="gtk_tut.html#toc5" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut.html#toc5"><IMG SRC="toc.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/toc.gif" ALT="Contents"></A><HR><H2><A NAME="s5">5. 物件概论</A></H2><P><P>在GTK下,一般产生物件的步骤为:<OL><LI> gtk_*_new - 最普遍产生物件的函数. </LI><LI>连接信号到信号处理器.</LI><LI> 设定物件属性.</LI><LI> 要将物件包装到一个container可用gtk_container_add()或gtk_box_pack_start().</LI><LI> gtk_widget_show().</LI></OL><P>gtk_widget_show()让GTK知道我们已经完成设定的工作, 并且已经准备好要显示.您也可以用gtk_widget_hide来隐藏它. 显示物件的顺序并不太重要, 但我建议最後才显示,这样才不会看到这些视窗们一个一个被画出来.子物件在使用gtk_widget_show使视窗出现之前是不会被显示出来的.<P><H2><A NAME="ss5.1">5.1 分派系统</A></H2><P>再继续下去您会发现, GTK使用一种分派系统. 一般是用巨集来完成. 您可以看到诸如以下:<P><UL><LI> GTK_WIDGET(widget)</LI><LI> GTK_OBJECT(object)</LI><LI> GTK_SIGNAL_FUNC(function)</LI><LI> GTK_CONTAINER(container)</LI><LI> GTK_WINDOW(window)</LI><LI> GTK_BOX(box)</LI></UL><P>这些在函数中的都是分派参数.您可以在范例中看到, 而且只要看到该函数就会知道它们是做什麽用的.<P>从以下的组织图来看, 所有GtkWidgets都是由GtkObject而来. 这意味著您可以在任何地方, 透过GTK_OBJECT()巨集要求一个物件.<P>例如:<P><BLOCKQUOTE><CODE><PRE>gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(callback_function), callback_data);</PRE></CODE></BLOCKQUOTE> <P>这样分派一个按钮给一个物件, 并且提供一个指标给callback函数.<P>许多物件同时也是containers. 如果您看看以下的组织图,您会看到许多物件由GtkContainer而来 所有这一类的物件都可以用GTK_CONTAINER巨集产生使用containers.<P><P><H2><A NAME="ss5.2">5.2 物件组织图</A></H2><P>这里是一些参考, 物件组织图.<P><BLOCKQUOTE><CODE><PRE> 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</PRE></CODE></BLOCKQUOTE><P><P><H2><A NAME="ss5.3">5.3 没有视窗的物件</A></H2><P>以下的物件跟视窗没有关系.如果您希望接取它们的事件, 您需要使用GtkEventBox.请见<A HREF="gtk_tut-9.html#sec_The_EventBox_Widget" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-9.html#sec_The_EventBox_Widget">EventBox物件</A><P><BLOCKQUOTE><CODE><PRE>GtkAlignmentGtkArrowGtkBinGtkBoxGtkImageGtkItemGtkLabelGtkPanedGtkPixmapGtkScrolledWindowGtkSeparatorGtkTableGtkViewportGtkAspectFrameGtkFrameGtkVPanedGtkHPanedGtkVBoxGtkHBoxGtkVSeparatorGtkHSeparator</PRE></CODE></BLOCKQUOTE><P>再过来我们会一个一个物件来示范如何产生及显示.一个很好的范例是testgtk.c, 您可以在gtk/testgtk.c里面找到.<P><HR><A HREF="gtk_tut-4.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-4.html"><IMG SRC="prev.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/prev.gif" ALT="Previous"></A><A HREF="gtk_tut-6.html" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut-6.html"><IMG SRC="next.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/next.gif" ALT="Next"></A><A HREF="gtk_tut.html#toc5" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/gtk_tut.html#toc5"><IMG SRC="toc.gif" tppabs="http://extend.hk.hi.cn/%7ehusuyu/http/beginner/gtk/toc.gif" ALT="Contents"></A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -