GTK+ 2.0 教学-元件概述

在 GTK 中创建一个元件的一般步骤是:

  1. gtk_*_new() – 创建各种元件的函式。这些函式都将在这一节中作详细的介绍。
  2. 把所有想连接的信号都连接到对应的信号处理函式。
  3. 设定元件的属性。
  4. 用 gtk_container_add() 或 gtk_box_pack_start()等适当的函式把元件放置到一个容器元件中。
  5. gtk_widget_show() 显示元件。

gtk_widget_show() 让 GTK 知道我们已经完成设定元件属性的工作,并且能够让它显示出来了。你也可以用 gtk_widget_hide 使元件再次隐藏起来。各个元件显示的顺序并不重要,不过我建议在最后显示视窗,这样整个视窗就可以立刻弹出来,而不是让用户看着视窗里的元件一个个生成并显示出来。在视窗(也是一个元件)用 gtk_widget_show() 函式显示出来之前,它的子元件并不会被显示。

型别转换

再继续下去你会发现,GTK 使用了一套型别转换系统。它利用的是一套巨集,这些巨集在转换前还会测试能否进行转换。一些常见的巨集是:

  G_OBJECT (object)
  GTK_WIDGET (widget)
  GTK_OBJECT (object)
  GTK_SIGNAL_FUNC (function)
  GTK_CONTAINER (container)
  GTK_WINDOW (window)
  GTK_BOX (box)

这些都用来在函式中转换参数。你将在范例中看到它们的使用,只要看看函式的宣告就可以知道什么时候需要使用它们。

在下节介绍的类别的组织里,你将知道所有的 GtkWidget 都是从 GObject 这个基本类别生来的。也就是说,你能把widget传给任何需要以object型态作为参数的函式 – 只要用一下 G_OBJECT() 巨集。

例如:

g_signal_connect( button, "clicked",
                  G_CALLBACK (callback_function), callback_data);
这样把 button 转换为一个 object,并提供一个函式指标作为回呼函式。

很多元件也是容器,如果你看下一节介绍的类别的组织,你就会注意到很多元件是从容器类别生来的。这些元件都可以用 GTK_CONTAINER 巨集转换后传递给需要以container作为参数的函式。

可惜的是,这些巨集在本教学中并没有广泛地提及,不过我推荐去看一下 GTK 的标头档或者 GTK API 参考手册。这将很有用。实际上,通过看函式的宣告来学习一个元件的使用也不难。

1 則留言


Comments are closed.