信号函数:
gint gtk_signal_connect(GtkObject *object,gchar *name,GtkSignalFuncfunc,gpointer func_data);
回掉函数的格式:
void callback_func(GtkEidget *widget,gpointer callback_data);
GTK的事件:gtk组件的行为或者X服务器发送的事件可以与下列事件联系起来:
button_press_event  
  按钮按下          
button_release_event 
  按钮释放
motion_notify_event 
  鼠标移动
delete_event 
  使用窗口管理器关闭
destroy_event 
  关闭
expose_event 
  曝光
key_press_event 
  按键按下
key_release_event 
  按键释放
enter_notify_event 
  鼠标指针进入组件
leave_notify_event 
  鼠标指针离开组件
configure_event 
  属性改变
focus_in_event 
  获得聚焦
focus_out_event 
  失去聚焦
map_event 
  映射
unmap_event 
  消失
property_notify_even 
  属性改变
selection_clear_event 
  选择清除
selection_request_event 
  选择请求
selection_notify_event 
  选择通知
proximity_in_event 
  接近
proximity_out_event 
  离开
drag_begin_event 
  拖开始
drag_request_event 
  拖请求
drag_end_event 
  拖结束
drop_enter_event 
  放进入
drop_leave_event 
  放离开
drop_data_available_event 
放数据可用

除有前面描述的信号机制外,还有一套 events 反映 X事件机制。回调函数可以与这些事件连接。这些事件是:

  • event
  • button_press_event
  • button_release_event
  • scroll_event
  • motion_notify_event
  • delete_event
  • destroy_event
  • expose_event
  • key_press_event
  • key_release_event
  • enter_notify_event
  • leave_notify_event
  • configure_event
  • focus_in_event
  • focus_out_event
  • map_event
  • unmap_event
  • property_notify_event
  • selection_clear_event
  • selection_request_event
  • selection_notify_event
  • proximity_in_event
  • proximity_out_event
  • visibility_notify_event
  • client_event
  • no_expose_event
  • window_state_event

为了连接一个回调函数到这些事件之一,你使用函数 g_signal_connect(),像前面介绍的一样,用上面事件名之一作为name 参数。事件的回调函数与信号的回调函数有一点点不同:

gint callback_func( GtkWidget *widget,GdkEvent  *event,gpointer   callback_data );

GdkEvent 是一个 C 联合结构,它的类型依赖于上述事件中的哪个事件发生了。为了让我们得知发生了哪个事件,每个可能的类型都有一个 type 成员来反映发生的事件。事件结构的其它部分将依赖于这个事件的类型。类型的可能的值有:
  GDK_NOTHINGGDK_DELETEGDK_DESTROYGDK_EXPOSEGDK_MOTION_NOTIFYGDK_BUTTON_PRESSGDK_2BUTTON_PRESSGDK_3BUTTON_PRESSGDK_BUTTON_RELEASEGDK_KEY_PRESSGDK_KEY_RELEASEGDK_ENTER_NOTIFYGDK_LEAVE_NOTIFYGDK_FOCUS_CHANGEGDK_CONFIGUREGDK_MAPGDK_UNMAPGDK_PROPERTY_NOTIFYGDK_SELECTION_CLEARGDK_SELECTION_REQUESTGDK_SELECTION_NOTIFYGDK_PROXIMITY_INGDK_PROXIMITY_OUTGDK_DRAG_ENTERGDK_DRAG_LEAVEGDK_DRAG_MOTIONGDK_DRAG_STATUSGDK_DROP_STARTGDK_DROP_FINISHEDGDK_CLIENT_EVENTGDK_VISIBILITY_NOTIFYGDK_NO_EXPOSEGDK_SCROLLGDK_WINDOW_STATEGDK_SETTING

所以,连接一个回调函数到这些事件之一,我们会这样用:
g_signal_connect (G_OBJECT (button), "button_press_event",G_CALLBACK (button_press_callback), NULL);

这里假定 button 是一个按钮构件。现在,当鼠标位于按钮上并按一下鼠标时,函数 button_press_callback() 会被调用。这个函数应该声明为:
static gint button_press_callback( GtkWidget      *widget, GdkEventButton *event,gpointer        data );
注意,我们可以把第二个参数类型声明为 GdkEventButton,因为我们知道哪个类型的事件会发生。
这个函数的返回值指示这个事件是否应该由 GTK 事件处理机制做进一步的传播。返回 TRUE 指示这个事件已经处理了,且不应该做进一步传播。返回 FALSE 继续正常的事件处理。详见高级事件和信号处理这一章。
GdkEvent 数据类型详情请参见附录 GDK 事件类型。
GDK 选中区和拖放的接口函数也发出许多事件,在 GTK 中用信号来反映。下列信号的内容详见源构件上的信号和目的构件上的信号这两章:
  • selection_received
  • selection_get
  • drag_begin_event
  • drag_end_event
  • drag_data_delete
  • drag_motion
  • drag_drop
  • drag_data_get
  • drag_data_received

转载于:https://www.cnblogs.com/JPAORM/archive/2012/01/05/2510049.html

【GTK】信号量(signal)大全相关推荐

  1. Android 信号量signal使用注意的问题

    再安卓中使用signal特别是与其他第三方的apk或SDK使用时需要主要先后顺序,因为有可能你的signal 会干掉第三方的系统进程,导致第三方出现错误而不知道从哪处理 我们项目中和果盘助手等sdk在 ...

  2. 测试MM32F3277中的MicroPython的Signal功能

    简 介: 通过对这个版本MicroPython中的Signal功能进行测试,可以看到它现在还存在问题.后来经过SuYong修正之后,问题解决了. 关键词: MicroPython,MM32,Signa ...

  3. GTK+ VS MFC

    为什么80%的码农都做不了架构师?>>>    今天看到一篇关于GTK+和MFC对比的文章,学GTK+编程的来看看 MFC已经江河日下,日渐式微,而GTK+可谓欣欣向荣,如日中天.这 ...

  4. MFC和GTK的区别

    关键技术 http://blog.csdn.net/master_max/article/details/1540204 MFC和GTK的区别?? 1. 两者都是基于面向对象设计的.尽管MFC是用C+ ...

  5. python模块—signal

    文章目录 信号 介绍 生命周期 信号处理 信号表示 信号分类 信号通信 常用信号 python signal 信号 介绍 信号signal的全称是软中断信号,是用来通知进程发生的异步事件,是在软件层次 ...

  6. gdb 跟踪调试命令整理

    内容源自于陈浩CSDN博客的用GDB调试程序一系列文章 用GDB调试程序(一) 用GDB调试程序(二) 用GDB调试程序(三) 用GDB调试程序(四) 用GDB调试程序(五) 用GDB调试程序(六) ...

  7. linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】

    (基于LINUX的操作系统实验教程)(最终版) <基于LINUX的操作系统实验教程.doc>由会员分享,可免费在线阅读全文,更多与<(基于LINUX的操作系统实验教程)(最终版)&g ...

  8. 花了一个深夜,才用C语言写了一个2048游戏雏形

    12年我毕业的第二个月工资,我就买了一个IPAD,然后在IPAD上下了一个2048游戏,玩起来非常爽. 然后这几天看到好几个公众号都发了自己写这个游戏的代码,然后我自己也想试试,所以就有了这篇文章,写 ...

  9. 如何优雅地停止Java进程

    目录 理解停止Java进程的本质 应该如何正确地停止Java进程 如何注册关闭钩子 使用关闭钩子的注意事项 信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境 ...

  10. vmx进程已提前退出_如何优雅地停止Java进程

    目录 理解停止Java进程的本质 应该如何正确地停止Java进程如何注册关闭钩子使用关闭钩子的注意事项信号量机制 总结 理解停止Java进程的本质 我们知道,Java程序的运行需要一个运行时环境,即: ...

最新文章

  1. Ubantu下hadoop运行第一个例子wordcount过程
  2. 网络推广外包中目标用户习惯对企业网站设计与开发有重要影响
  3. ASP.NET 配置log4net日志功能
  4. Python的re.match()和re.search()的使用和区别
  5. 【启发式合并】【dfs】树数树(nowcoder 20107-C)
  6. python学习笔记:第19天 类的约束、异常、MD5和logging
  7. java开发小程序好吗,看完必懂
  8. K8S从懵圈到熟练 - 节点下线姊妹篇
  9. Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向
  10. 队列处理器 WorkQueueT
  11. Android近场通信---NFC基础(一)
  12. 请给 SpringBoot 多一些内存
  13. 《算法导论》第三版第7章 快速排序 练习思考题 个人答案
  14. 【软件工程】实验七:建立功能模型--自行车租赁管理系统
  15. STM32F407+Cubemx学习应用[5]——DMA收发ModbusRS232数据——威纶通触摸屏
  16. 对于ssl中的pem文件和key 文件的理解
  17. 利用win7漏洞进行系统登录密码破解
  18. C语言----小游戏
  19. The following signatures couldn‘t be verified because the public key is not available问题解决
  20. Highcharts使用小心得

热门文章

  1. 获取map中的一个value值以及遍历map获得map里所有key、value的值
  2. B/S、C/S双客户类型系统研究
  3. Linux系统管理(6)——Linux下启动Redis服务的几种方法
  4. 设计一个60T数据仓库及大数据分析平台,医院数字化该怎么做?
  5. 建立可视化决策平台,“数据化”首当其冲! 1
  6. 报表软件公司悬赏 BUG,100块钱1个的真实用意
  7. 友商对于鸿蒙系统,谷歌新系统上线!鸿蒙面临生死线考验,华为喊话友商,被小米拒绝...
  8. 在一个html中使用另一个html数据,如何为某些HTML标签存储任意数据
  9. java的trans文件大小写_文件大小写转换与后缀不变
  10. Linux高频命令汇总,高频Linux命令