Gtk 3.0 原创教程 第三节
JackMerryYoung · · 个人记录
前言
欢迎来到 JMY 的 Gtk 3.0 原创教程!
上节课,我们开发了第一个程序,叫 Helloworld。
现在我们要往窗体里扔点东西,比如 按钮,文本 等。
添油加醋
代码如下:
#include <gtk/gtk.h>
int main(int argc,char *argv[])
{
GtkWidget *window;//窗口
GtkWidget *button;//按钮
gtk_init(&argc,&argv);//初始化
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);//创建窗口
gtk_window_set_title(GTK_WINDOW(window),"Button Test");//设置标题
button = gtk_button_new_with_label("Click me");//创建按钮
gtk_container_add(GTK_CONTAINER(window),button);//将按钮加入容器
gtk_widget_show(button);//显示按钮
gtk_widget_show(window);//显示窗口
gtk_main();//进入主循环
return 0;
}
这里多了三个函数,他们是什么意思呢?
gtk_button_new_with_label 是用来创建一个 带有标签的按钮
gtk_container_add 就是 往指定容器里添加组件。
GTK_CONTAINER 其实是一个宏,来 获取对应容器组件的容器对象。
看到这,你可能会有点问题,既然是 容器组件 了,他还要获取啥 容器 啊?
这里,我们要讲一下 继承 的思想:有 父类 Object,一个类 Plant 继承于 Object,那么 Plant 不仅 拥有了 Object 的特点,自己也可以 扩展 出自己的特点。所以 Object 类型的对象,能向下转换成 Plant 类型的对象,但 Plant 却不能向上转换(除了强制)。
为了强制将 GtkWindow 转换成 GtkContainer(因为 GtkWindow 是 GtkContainer的子类),于是就定义了这么个宏。
相信你都理解了吧,那好,我们把他保存成 gtk-button.c,然后编译他,如图所示(本人开发环境又变成了 Cygwin,因为懒得开虚拟机了):
也可以在 Linux 终端里直接输入 gcc gtk-button.c -o gtk-button.o `pkg-config --cflags --libs gtk+-3.0`,然后回车。
编译完之后,再运行生成的 gtk-button.o 文件:
(注意,这里我又打错了,应该使用 ./gtk-button.o)
然后就会弹出个窗口(如果用 Cygwin 没有弹出而且报了 cannot open display 的错,Use The ****ing Google 或者加上 --display=:0.0 选项,我也遇到了这个问题,调一下程序所显示的显示器就好了):
至此,我们成功地往窗体里添加了组件,这不禁让人兴奋。
接下来?
下一步,我们将学习四种布局盒子。这将让你可以构造出一个友好的用户界面,而不再是一个按钮占满了整个窗口了,这听上去不错,对吗?