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

📄 x2141.html

📁 GTK编程
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><HTML><HEAD><TITLE>一个构件的剖析</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="GTK+ 2.0 教程"HREF="book1.html"><LINKREL="UP"TITLE="编写你自己的构件"HREF="c2132.html"><LINKREL="PREVIOUS"TITLE="编写你自己的构件"HREF="c2132.html"><LINKREL="NEXT"TITLE="创建一个复合构件"HREF="x2152.html"></HEAD><BODYCLASS="SECT1"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">GTK+ 2.0 教程</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="c2132.html"ACCESSKEY="P">&#60;&#60;&#60; Previous</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom">编写你自己的构件</TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="x2152.html"ACCESSKEY="N">Next &#62;&#62;&#62;</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="SEC-THEANATOMYOFAWIDGET">一个构件的剖析</H1><P>要想创建一个新的构件,最重要的是要对 GTK 对象的工作原理有所了解。这一节只是一个简述,详见参考手册。</P><P>GTK 构件具有面向对象的特性。然而,它是用标准的 C 实现的。这极大的改善了在当前 C++ 编译器上使用的可移植性和稳定性;但是,这也意味着写构件的人必须注意一些实现的细节。一个构件类的所有实例(比如所有的按钮构件)的共有信息存储在<ICLASS="EMPHASIS">类结构</I>里,类的信号信息只以该结构存储了一份(充当 C 中的虚函数)。为了支持继承,类结构的第一个域必须是它的父类结构的一个拷贝。GtkButton 的类结构声明如下:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">struct _GtkButtonClass{  GtkContainerClass parent_class;  void (* pressed)  (GtkButton *button);  void (* released) (GtkButton *button);  void (* clicked)  (GtkButton *button);  void (* enter)    (GtkButton *button);  void (* leave)    (GtkButton *button);};</PRE></TD></TR></TABLE><P>当将一个按钮视为容器时(例如,当调整它的大小时),它的类结构被转换为 GtkContainerClass,并且相应的域用于处理信号。</P><P>每一个构件也有一个结构,它是创建每个实例的基础。该结构有为每个构件的实例存储不同信息的域。我们把该结构称为<ICLASS="EMPHASIS">对象结构</I>。如下是按钮类:</P><TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="100%"><TR><TD><PRECLASS="PROGRAMLISTING">struct _GtkButton{  GtkContainer container;  GtkWidget *child;  guint in_button : 1;  guint button_down : 1;};</PRE></TD></TR></TABLE><P>请注意,它同类结构相似,第一个域是父类的对象结构,因此该结构在需要时可以转换为父类的对象结构。</P></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="c2132.html"ACCESSKEY="P">&#60;&#60;&#60; Previous</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="book1.html"ACCESSKEY="H">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="x2152.html"ACCESSKEY="N">Next &#62;&#62;&#62;</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">编写你自己的构件</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="c2132.html"ACCESSKEY="U">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">创建一个复合构件</TD></TR></TABLE></DIV></BODY></HTML>

⌨️ 快捷键说明

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