在 GTK 中创建一个元件的一般步骤是:
- gtk_*_new() – 创建各种元件的函式。这些函式都将在这一节中作详细的介绍。
- 把所有想连接的信号都连接到对应的信号处理函式。
- 设定元件的属性。
- 用 gtk_container_add() 或 gtk_box_pack_start()等适当的函式把元件放置到一个容器元件中。
- 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.