Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

GTK入门导引

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  And here's the main.h


#ifndef __MAIN_H__
#define __MAIN_H__
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
void file_quit_cmd_callback(GtkWidget *widget, gpointer data);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __MAIN_H__ */
And main.c 
#include <gtk/gtk.h>
#include "main.h"
#include "menus.h"
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *main_vbox;
GtkWidget *menubar;
GtkAcceleratorTable *accel;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window), "destroy", 
GTK_SIGNAL_FUNC(file_quit_cmd_callback), 
"WM destroy");
gtk_window_set_title(GTK_WINDOW(window), "Menu Factory");
gtk_widget_set_usize(GTK_WIDGET(window), 300, 200);
main_vbox = gtk_vbox_new(FALSE, 1);
gtk_container_border_width(GTK_CONTAINER(main_vbox), 1);
gtk_container_add(GTK_CONTAINER(window), main_vbox);
gtk_widget_show(main_vbox);
get_main_menu(&menubar, &accel);
gtk_window_add_accelerator_table(GTK_WINDOW(window), accel);
gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, TRUE, 0);
gtk_widget_show(menubar);
gtk_widget_show(window);
gtk_main();
return(0);
}
/* This is just to demonstrate how callbacks work when using the
 * menufactory.Often, people put all the callbacks from the menus
 * in a separate file, and then have them call the appropriate functions
 * from there.Keeps it more organized. */
void file_quit_cmd_callback (GtkWidget *widget, gpointer data)
{
g_print ("%s
", (char *) data);
gtk_exit(0);
}

  这里是makefile.


CC= gcc
PROF= -g
C_FLAGS =-Wall $(PROF) -L/usr/local/include -DDEBUG
L_FLAGS =$(PROF) -L/usr/X11R6/lib -L/usr/local/lib 
L_POSTFLAGS = -lgtk -lgdk -lglib -lXext -lX11 -lm
PROGNAME = at
O_FILES = menus.o main.o
$(PROGNAME): $(O_FILES)
rm -f $(PROGNAME)
$(CC) $(L_FLAGS) -o $(PROGNAME) $(O_FILES) $(L_POSTFLAGS)
.c.o: 
$(CC) -c $(C_FLAGS) $<
clean: 
rm -f core *.o $(PROGNAME) nohup.out
distclean: clean 
rm -f *~

  15. Timeouts, IO及Idle函数

  15.1 Timeouts

  您可能会想要在gtk_man idle时, 做一些事情. 你有好几个选择. 使用以下这些函数可以产生一个timeout函数, 它每间隔一阵子就会去呼叫您的函数.


gint gtk_timeout_add (guint32 interval,
GtkFunction function,
gpointer data);

  第一个参数是每间隔interval milliseconds会去呼叫您的函数. 第二个是该函数. 第三个是要传给该函数的资料. 返回值则为该行程的"标签".


void gtk_timeout_remove (gint tag);

  您可以在您的timeout函数返回zero或FALSE来停止timeout函数. 这就是说您必须返回非零值, 如TRUE.

  你的callback函数必须像这样:


gint timeout_callback (gpointer data);

  15.2 监督IO

  GTK另一个漂亮的功能是有办法去检查一个file descriptor的资料. (as returned by open(2) or socket(2)). 这个在网路软体上很有用:


gint gdk_input_add (gint source,
GdkInputCondition condition,
GdkInputFunctionfunction,
gpointer data);

  第一个参数是您想看的file descriptor, 第二个是你要GDK去看那一项, 可以是以下几项:

  GDK_INPUT_READ - 当file descriptor有资料的时候会去呼叫您的函数.

  GDK_INPUT_WRITE - 当您的file descriptor可以被写入资料的时候.

  第三个当然是callback函数. 第四个是要传给callback的资料.

  返回值是可用来停止监督的一个"标签".


void gdk_input_remove (gint tag);

  当您的callback函数返回zero或FALSE时, GTK会停止呼叫您的callback函数.

  15.3 Idle函数

  当什麽事情都不发生时, 您要呼叫一个函数时要怎麽办?


gint gtk_idle_add (GtkFunction function,gpointer data);

  当什麽事都不发生时, GTK会去呼叫这个函数.


void gtk_idle_remove (gint tag);

  这个不用解释了吧. 您若在idle函数返回zero或FALSE会停止idle函数的运行.

  17. glib

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:GTK+/Gnome应用开发   下一篇:GTK v1.2 Tutorial(英文)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
·Motorola微处理器bootloader分析与应用
·Fedora Core5 NFS服务器搭建过程介绍
·Linux系统:让内存不再泄漏的实用技巧
·新手看招 手把手教你安装VMware虚拟机
·“侵权事件” 红帽称微软企图干扰用户
·删除Linux后 如何找回Windows启动菜单
·菜鸟乐园 Linux中常见文件系统格式介绍
·Linux操作系统下IPTables配置方法详解
·实用技巧 Linux系统的经典使用技巧八则
·Linux系统文件优化及磁盘检查方法介绍
推荐文章
精彩文章
Power by linux-cn.com 粤ICP备05006655号