分享

【转】Gtk学习笔记(一)

 Tornador 2014-06-18
 几个重要函数:(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的”按键监听“。 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多