⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sec-gtkarg.html

📁 GTK+_ Gnome Application Development
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html>  <head>    <title>      GtkArg and the Type System    </title>    <meta name="GENERATOR" content=    "Modular DocBook HTML Stylesheet Version 1.45">    <link rel="HOME" title="GTK+ / Gnome Application Development"    href="ggad.html">    <link rel="UP" title="The GTK+ Object and Type System" href=     "cha-objects.html">    <link rel="PREVIOUS" title="Initializing a New Class" href=     "sec-classinit.html">    <link rel="NEXT" title="Object Arguments" href=     "hc-objectargs.html">  </head>  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink=   "#840084" alink="#0000FF">    <div class="NAVHEADER">      <table width="100%" border="0" bgcolor="#ffffff" cellpadding=       "1" cellspacing="0">        <tr>          <th colspan="4" align="center">            <font color="#000000" size="2">GTK+ / Gnome Application            Development</font>          </th>        </tr>        <tr>          <td width="25%" bgcolor="#ffffff" align="left">            <a href="sec-classinit.html"><font color="#0000ff"            size="2"><b>&lt;&lt;&lt; Previous</b></font></a>          </td>          <td width="25%" colspan="2" bgcolor="#ffffff" align=           "center">            <font color="#0000ff" size="2"><b><a href="ggad.html">            <font color="#0000ff" size="2"><b>            Home</b></font></a></b></font>          </td>          <td width="25%" bgcolor="#ffffff" align="right">            <a href="hc-objectargs.html"><font color="#0000ff"            size="2"><b>Next &gt;&gt;&gt;</b></font></a>          </td>        </tr>      </table>    </div>    <div class="SECT1">      <h1 class="SECT1">        <a name="SEC-GTKARG"><span class="STRUCTNAME">GtkArg</span>        and the Type System</a>      </h1>      <p>        Before delving further into <span class="STRUCTNAME">        GtkObject</span>, you will need more details on GTK+'s type        system. The type system is used in many contexts:      </p>      <ul>        <li>          <p>            It allows signals and callbacks with any signature to            be dynamically registered and dynamically queried.            Function argument lists can be constructed at            runtime.&#13;          </p>        </li>        <li>          <p>            It allows object attributes (values that you can "get"            or "set") to be dynamically queried and            manipulated.&#13;          </p>        </li>        <li>          <p>            It exports information about enumerations and bitfields            (lists of permitted values, and human-readable            names).&#13;          </p>        </li>        <li>          <p>            It is possible to identify types at runtime and            traverse the object class hierarchy.&#13;          </p>        </li>      </ul>      <p>        Because of its type system, GTK+ is particularly easy to        manipulate from dynamically-typed, interactive languages.        There are bindings available for nearly all popular        languages, and the bindings can be lightweight (since GTK+        already includes much of the needed functionality, and        types can be handled generically so the amount of glue code        is reduced). You can find a complete list of functions for        querying and using GTK+'s type system in <tt class=        "FILENAME">gtk/gtktypeutils.h</tt>; most of these are not        useful in applications. Only the functions of general        interest are described in this book.      </p>      <p>        GTK+ has a number of so-called <i class="FIRSTTERM">        fundamental</i> types which are automatically registered        during <tt class="FUNCTION">gtk_init()</tt> (or <tt class=         "FUNCTION">gnome_init()</tt>). The fundamental types        include all the primitive C types, some GTK+ types such as        <span class="STRUCTNAME">GTK_TYPE_SIGNAL</span>, and <span        class="STRUCTNAME">GTK_TYPE_OBJECT</span>. Fundamental        types are essentially the "base classes" understood by the        GTK+ type system; for example, the fundamental type of any        enumeration is <span class="STRUCTNAME">        GTK_TYPE_ENUM</span>, and the fundamental type of any <span        class="STRUCTNAME">GtkObject</span> subclass is <span        class="STRUCTNAME">GTK_TYPE_OBJECT</span>. Fundamental        types are supposed to cover all the "special cases" in the        GTK+ type system; all types ultimately derive from some        fundamental type. A type's fundamental type is extracted        from a <span class="STRUCTNAME">GtkType</span> with the <tt        class="FUNCTION">GTK_FUNDAMENTAL_TYPE()</tt> macro. The        fundamental types are shown in <a href=         "sec-gtkarg.html#TABLE-FUNDTYPES">Table 1</a>.      </p>      <p>        There is a second category of <span class="STRUCTNAME">        GtkType</span> values: <i class="FIRSTTERM">builtin</i>        types are registered by GTK+ and <tt class="APPLICATION">        libgnomeui</tt> during library initialization and are thus        always available. Builtin types include enumerations,        flags, and some structs (<span class=        "STRUCTNAME">GdkWindow</span>, or <span class="STRUCTNAME">        GdkImlibImage</span>, for example). Builtin types are        distinct from fundamental types because the GTK+ object        system does not have to understand them; for the purposes        of getting and setting argument values, they can be treated        as fundamental types. They are somewhat arbitrarily        distinguished from user-registered enumeration or flag        types. (The difference between builtin types and user types        is the time of registration.)      </p>      <p>        Builtin types are all accessible via macros that come with        GTK+ and Gnome. These begin with <span class="STRUCTNAME">        GTK_TYPE_</span>, as in: <span class="STRUCTNAME">        GTK_TYPE_WINDOW</span>, <span class="STRUCTNAME">        GTK_TYPE_GDK_WINDOW</span>, <span class="STRUCTNAME">        GTK_TYPE_RELIEF_STYLE</span>, <span class="STRUCTNAME">        GTK_TYPE_GNOME_DIALOG</span>. As you can see, the name of        the type macro is derived from the name of the <span class=         "STRUCTNAME">GtkObject</span>, struct, or enumeration; if        the object name begins with "Gtk," the "Gtk" is dropped.        The above examples map to the <tt class="CLASSNAME">        GtkWindow</tt> widget, <span class="STRUCTNAME">        GdkWindow</span> struct, <span class="STRUCTNAME">        GtkReliefStyle</span> enumeration, and <span class=         "STRUCTNAME">GnomeDialog</span> widget, respectively.      </p>      <p>        The final major category of <span class="STRUCTNAME">        GtkType</span> values consists of the registered <span        class="STRUCTNAME">GtkObject</span> types. These are        registered the first time the <span class="STRUCTNAME">        _get_type()</span> routine for each object is called.      </p>      <div class="TABLE">        <a name="TABLE-FUNDTYPES"></a>        <p>          <b>Table 1. The GTK+ Fundamental Types</b>        </p>        <table border="1" bgcolor="#E0E0E0" cellspacing="0"        cellpadding="4" class="CALSTABLE">          <tr>            <th align="LEFT" valign="TOP">              <span class="STRUCTNAME">GtkType</span> Constant            </th>            <th align="LEFT" valign="TOP">              Corresponding C Type            </th>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_INVALID</span>            </td>            <td align="LEFT" valign="TOP">              None            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_NONE</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">void</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_CHAR</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gchar</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_UCHAR</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">guchar</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_BOOL</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gboolean</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_INT</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gint</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_UINT</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">guint</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_LONG</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">glong</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_ULONG</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gulong</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_FLOAT</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gfloat</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_DOUBLE</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gdouble</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_STRING</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gchar*</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_ENUM</span>            </td>            <td align="LEFT" valign="TOP">              Any enumeration            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_FLAGS</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">guint</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_BOXED</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gpointer</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_POINTER</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gpointer</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_SIGNAL</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GtkSignalFunc</span>, <span              class="STRUCTNAME">gpointer</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_ARGS</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gint</span>, <span class=               "STRUCTNAME">GtkArg*</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_CALLBACK</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GtkCallbackMarshal</span>,              <span class="STRUCTNAME">gpointer</span>, <span              class="STRUCTNAME">GtkDestroyNotify</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_C_CALLBACK</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GtkFunction</span>, <span              class="STRUCTNAME">gpointer</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_FOREIGN</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">gpointer</span>, <span              class="STRUCTNAME">GtkDestroyNotify</span>            </td>          </tr>          <tr>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GTK_TYPE_OBJECT</span>            </td>            <td align="LEFT" valign="TOP">              <span class="STRUCTNAME">GtkObject*</span>            </td>          </tr>        </table>      </div>      <p>        Some of the fundamental types require further explanation.        In brief:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -