GTK入门导引GTK_OBJECT及GTK_SIGNAL_FUNC是分派巨集.
下一个函数是用来设定container物件的属性. This just sets the window so it has a blank area along the inside of it 10 pixels wide where no widgets will go. There are other similar functions which we will look at in the section on Setting Widget Attributes
这个会产生一个新的按钮. 它配置记忆体给一个新的GtkWidget, 并初始化. 他将会有一个标签"Hello World".
然後, 我们让这个按钮做一点事. 我们将他接到一个信号处理器, 因此它会送出"clicked"信号, 而我们的hello()函数会被呼叫到. 资料被忽略, 所以我们只喂NULL给hello(), 明显的, "clicked"信号当我们敲下滑鼠时被送出.
我们将用这个按钮来离开程式. 这将展示"destroy"信号可以是来自window manager, 或是我们的程式. 当按钮被"clicked", 跟上面一样, 它会呼叫hello() callback函数, 然後是这一个, 以它们被设定的先後顺序被呼叫到. 您可以有任意个callback函数, 它们会以被连接的先後顺序被执行到. 因为gtk_widget_destroy()函数仅接受 GtkWidget *widget做为参数, 我们使用gtk_signal_connect_object() , 而不用gtk_signal_connect().
这是个封装呼叫, 我们在後面的文件中会解释. 不过这倒蛮容易理解的. 它就是告诉GTK按钮要放在要显示出来的那个视窗.
现在我们将所有东西照我们的意思来设定好了. 所有信号接好了, 按钮也放到该有的位置, 现在来"show"这个视窗吧. 这个整个视窗会一下子从萤幕蹦出来, 而不是先看到视窗, 然後按钮才跑出来.
还有当然了, 我们呼叫gtk_main()来等待X事件的发生, 当事件发生时, 它将会呼叫物件来送出信号.
最後, 程式终止於此. 在gtk_quit()被呼叫到後, 程式会离开.
在, 当我们在GTK上敲下滑鼠, 这个物件会送出"clicked"信号. 我们的程式设定了信号处理器来接取这个信号, 这样我们便可利用这个资讯. 在我们的范例中, 当按钮被"clicked", hello()函数被呼叫到, 并被传入一个NULL参数, 然後下一个处理函数被呼叫到. 它会呼叫gtk_widget_destroy()函数, 传入视窗物件做为参数, 并将该视窗物件销毁. 这会导致该视窗送出"destroy"信号, 收到该信号後, 会呼叫我们的destroy() callback函数, 而我们的destroy()会令程式离开GTK. 另一个方式当然是利用window manager来销毁该视窗. 这也会导致该视窗送出"destroy"信号, 然後呼叫destroy() callback, 然後离开. 这些信号与UNIX系统不太一样, 并非基於UNIX系统的信号系统, 虽然它们的术语是一样的. 3. 下一步 3.1 资料型态 有些东西您可能在前面的范例中已经看到, 这需要多解释一下. 像gint, gchar等等. 这些是为了取得绝对乾净的独立性, 如资料大小等等. 像"gint32"就是个很好的范例, 其目的是维持到任意平台均为32bits, 不管是64 bit alpha或是32 bit i386. 其定义是极其直接而且直觉的. 它们都被定义在glib/glib.h (被gtk.h所include). 您也看到像在GtkWidget这一类的东西. GTK是物件导向的设计, 而widget则是其中的物件. 3.2 更多关於信号处理函数 我们来看看gtk_signal_connect宣告.
看到gint的返回值? 这是个标明您的callback函数的标签值. 像之前所说的, 每个信号及物件可以有好几个callback, 每个会以它们所接上的顺序被轮流执行到. 您可以用以下这个函数来移除这个callback函数: 上一篇:GTK+/Gnome应用开发 下一篇:GTK v1.2 Tutorial(英文) 更多相关文章
|
推荐文章
精彩文章
|