您的位置:首页 > 其它

一个构件的剖析@GTK+ 2.0 中文教程连载

2010-12-21 16:21 288 查看

一个构件的剖析

要想创建一个新的构件,最重要的是要对 GTK 对象的工作原理有所了解。这一节只是一个简述,详见参考手册。

GTK 构件具有面向对象的特性。然而,它是用标准的 C 实现的。这极大的改善了在当前 C++ 编译器上使用的可移植性和稳定性;但是,这也意味着写构件的人必须注意一些实现的细节。一个构件类的所有实例(比如所有的按钮构件)的共有信息存储在类结构
里,类的信号信息只以该结构存储了一份(充当 C 中的虚函数)。为了支持继承,类结构的第一个域必须是它的父类结构的一个拷贝。GtkButton 的类结构声明如下:

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);

};

当将一个按钮视为容器时(例如,当调整它的大小时),它的类结构被转换为 GtkContainerClass,并且相应的域用于处理信号。

每一个构件也有一个结构,它是创建每个实例的基础。该结构有为每个构件的实例存储不同信息的域。我们把该结构称为对象结构
。如下是按钮类:

struct _GtkButton

{

GtkContainer container;

GtkWidget *child;

guint in_button : 1;

guint button_down : 1;

};

请注意,它同类结构相似,第一个域是父类的对象结构,因此该结构在需要时可以转换为父类的对象结构。

<<< Previous
Home
Next >>>
编写你自己的构件Up
创建一个复合构件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: