几个重要函数:(zz) ======== 所有GTK应用程序都要调用该函数。 gtk_init()的目的是为了应用程序初始化GDK和GTK+库。如果gtk_init()出现问题,那么应用程序就会退出。 gti_init()在argv中搜索它能识别的运行库参数。处理并从argv矢量中删除已识别的参数。 主要检查下面所列的一些命令行参数: --gtk-module 启动时加载指定模块 --g-fatal-warnings GTK+/GTK生成的警告和错误会使出错的程序退出 --gtk-debug 打开指定的GTK+跟踪/调试消息 --gtk-no-debug 关闭指定的GTK+跟踪/调试消息 --gdk-debug 打开GDK跟中调试消息 --gdk-no-debug 关闭指定的GDK跟踪/调试消息 --display h:s:d 连接到指定的X服务器,其中h为主机名,s为服务器号,d为显示号 --sync 成功建立X服务器的连接后,调用XSynchronize --no-xshm 禁止使用X共享内存扩展(X Shared Memory Extension) --name progname 将程序名设为progname --class classname 程序类是首字母大写的程序名。如果指定了--class,那么会将程序名设为classname void gtk_exit(int errorcode) gtk_exit()是gdk_exit()的封装,gtk_exit()只是调用exit(1),将errorcode作为参数进行传递。 void gtk_main() 一旦GTK+应用程序调用了gtk_main(),那么GTK+就接管了控制权。gtk_main()函数运行主循环,直到调用gtk_main_quit()函数,gtk_main()才会退出。 gtk_main()函数的所有实例功能都是一样的,它们都监视同一个与X服务器的连接,都对同样的事件队列起作用。gtk_main()实例用于阻塞、遮断一个函数的控制流直到满足某些条件。所有的Gtk+程序都用这个技巧使应用程序正在运行时main()函数不能退出去。 void gtk_main_quit() gtk_main_quit()会使gtk_main()跳出循环并返回。 GTK+允许gtk_main()嵌套,每个gtk_main()调用必须对应于一个gtk_main_quit()调用。 guint gtk_main_level() gtk_main_level()用来判断gtk_main()当前级别。 如果返回0,说明没有在gtk_main()环境中执行应用程序。如果返回1,说明有一个单独的gtk_main()调用存在,等等。 gint gtk_main_iteration() gtk_main_iteration()会使GTK+只在主循环中通过一次,处理下一个事件并允许构件调用信号函数,但是不会调用init和quit函数。 gint gtk_events_pending() gtk_events_pending()用来检查时事件列中是否有挂起的事件。 如果在该函数调用期间没有事件需要处理,那么返回FALSE,否则返回TRUE。gtk_events_pending()不会终止也不会处理事件队列中可能等待的事件。 void gtk_init_add(GtkFunction function,gpointer data) gtk_init_add()用来注册init函数,当应用程序下一次调用gtk_main()时就会调用init。函数注册数量不受限制,但必须符合下面的原型: void function (gpoint data); gtk_init_add()函数第一个参数是希望调用的函数指针。第二个参数是可以牵制转化为gpointer的任意值。 每次调用gtk_init_add()时,都会将函数和数据添加到GTK+维护的列表中。下一次调用gtk_main()时,GTK+在进入事件循环前会调用每个函数。函数返回后,GTK+就会从列表中清除函数和数据。 guint gtk_quit_add(guint main_level,GtkFunction function,gpointer data) quit函数与init函数类似,但只有在gtk_main()退出其循环后才调用它。gtk_quit_add()用来注册quit函数。 quit函数必须满足下面的原型: gint function(gpointer data); gtk_quit_add()的第一个参数告知了gtk_main()的嵌套级别。如果main_level为0,则每次调用gtk_main_quit()时都会执行quit函数。如果非0,那么只有调用那个嵌套级别的gtk_main_quit()时才执行该函数。 quit函数必须返回一个状态值,如果返回0,则会从GTK+维护的quit函数列表中删除quit函数。 gtk_quit_add()返回一个gunit ID。可以通过gtk_quit_remove()函数从GTK+列表中删除quit函数。 void gtk_quit_remove(guint id) 应用程序还可以通过数据识别要删除的quit函数。该函数仅仅是quit列表中与数据对应的第一个quit函数。 void gtk_quit_remove_by_data(gpointer data) void gtk_quit_add_destory(guint main_level,GtkObject *object) 通过调用gtk_quit_add_destory(),当主循环通过gtk_main_exit()退出时会执行撤消对象。main_level是嵌套 的主循环级别。 guint gtk_timeout_add(guint32 interval,GtkFuction function,gpointer data) gtk_timeout_add()的第一个参数是无符号32位值,表示在计时器等待的时间(单位:毫秒)。一旦时间到,就会调用函数所指定的function并传递指定参数data。超时函数原型: gint function(gpointer data) 如果超时函数返回非0,则GTK+会重新启动计时器并计时。如果返回0,则取消超时记录并且不再触发它。 void gtk_timeout_remove(guint tag) gtk_timeout_remove()用来取消超时的注册记录。tag是gtk_timeout_add()的返回值。 guint gtk_idle_add(GtkFunction function,gpointer data) gtk_idle_add()用来调用并注册空闲函数。类似gtk_timeout_add()函数。 空闲函数是在每次通过GTK+主循环时才调用。空闲函数原型: gint function(gpointer data); 如果空闲函数返回0,则GTK+会撤消该函数。如果非0,则在下一个gtk主循环中在次调用。 guint gtk_idle_add_priority(gint priority,GtkFunction function,gpointer data) gtk_idle_add_priority()在添加空闲函数时为其设置优先级。GTK+以轮转方式只执行当前所注册的所有空闲 函数中优先级最高的空闲函数。优先级表(高到低): G_PRIORITY_HIGH G_PRIORITY_DEFAULT G_PRIORITY_HIGH_IDLE G_PRIORITY_DEFAULT_IDLE G_PRIORITY_LOW GTK_PRIORITY_REDRAW GTK_PRIORITY_RESIZE GTK_PRIORITY_HIGH GTK_PRIORITY_INTERNAL GTK_PRIORITY_DEFAULT GTK_PRIORITY_LOW void gtk_idle_remove(guint tag) 通过调用gtk_idle_remove()传递gtk_idle_add_priority()或gtk_idle_add()返回的guint值撤消空闲函数。 void gtk_idle_remove_by_data(gpointer data) 通过gtk_idle_remove_by_data()传递一个gpointer类型参数来实现撤消空闲函数,gpointer类型参数是空闲函数创建时传递给gtk_idle_add*()的参数。 guint gtk_key_snooper_install(GtkKeySnoopFunc snooper,gpointer func_data) gtk_key_snooper_install()接受的参数是志向监听(snooper)函数的指针和GTK+每次调用监听函数时以gpointer形式传递给监听函数的用户数据。返回一个唯一的ID。 监听函数的原型如下: gint function(GtkWidget *widget,GdkEventKey *event,gpointer data) 参数widget是接收按键事件的构件。参数event详细描述了按键事件。GdkEventKey的定义如下: typedef struct GdkEventKey { GdkEventType type; GdkWindow *window; gint8 send_event; guint32 time; guint state; guint keyval; gint length; gchar *string; } GdkEventKey; void gtk_key_snooper_remove(guint snooper_id) gtk_key_snooper_remove()函数用来删除ID为snooper_id的”按键监听“。 |
|