众所周知,FLTK的回调只能有一个,其他的需要重写handle(),所以我打算直接重写handle(),制作多个回调

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
void no_cb(Fl_Widget*,void*){}
class Button : public Fl_Button
{private:void (*onPush)(Fl_Widget*,void*);void (*onRelease)(Fl_Widget*,void*);void (*onMove)(Fl_Widget*,void*);void (*onHide)(Fl_Widget*,void*);void (*onShow)(Fl_Widget*,void*);void* _push_data;void* _release_data;void* _move_data;void* _hide_data;void* _show_data;public:Button(int x,int y,int w,int h,char* l = 0):Fl_Button(x,y,w,h,l){onPush = no_cb;_push_data = 0;onRelease = no_cb;_release_data = 0;onMove = no_cb;_move_data = 0;onHide = no_cb;_hide_data = 0;onShow = no_cb;_show_data = 0;}int handle(int event){switch(event){case FL_PUSH:(*onPush)(this,_push_data);return 1;case FL_RELEASE:(*onRelease)(this,_release_data);return 1;case FL_MOVE:(*onMove)(this,_move_data);return 1;case FL_HIDE:(*onHide)(this,_hide_data);return 1;case FL_SHOW:(*onShow)(this,_show_data);return 1;}return 0;}void callback(int event,void (*cb)(Fl_Widget*,void*),void* data = 0){switch(event){case FL_PUSH:onPush = cb;_push_data = data;break;case FL_RELEASE:onRelease = cb;_release_data = data;break;case FL_MOVE:onMove = cb;_move_data = data;break;case FL_HIDE:onHide = cb;_hide_data = data;break;case FL_SHOW:onShow = cb;_show_data = data;break;}}
};
int main()
{Fl_Window window(600,800,"");Button btn(0,0,600,100);btn.callback(FL_PUSH,[](Fl_Widget* w,void*){((Button*)(w))->label("push");});btn.callback(FL_RELEASE,[](Fl_Widget* w,void*){((Button*)(w))->label("release");});btn.callback(FL_MOVE,[](Fl_Widget* w,void*){((Button*)(w))->label("move");});btn.callback(FL_HIDE,[](Fl_Widget* w,void*){((Button*)(w))->label("hide");});btn.callback(FL_SHOW,[](Fl_Widget* w,void*){((Button*)(w))->label("show");});window.show();return Fl::run();
}

FLTK 重写Fl_Button回调相关推荐

  1. Android移动开发之【通往安卓的神奇之旅】基于回调的事件处理

    文章目录 1 Android中的事件处理方法 2 基于回调的事件处理机制详解 1 Android中的事件处理方法 事件处理:响应用户UI动作,提高应用程序交互性 1.基于监听的事件处理机制 2.基于回 ...

  2. java 回调(callback)函数简介.

    一, 什么是回调函数(callback) 假如类A有1个方法a(), 但是它不知道什么时候调用这个方法a(). 而类B告诉类A, 我知道什么时候调用.    那么类A就把自己交给类B(作为类B的一个成 ...

  3. Android视角,精妙绝伦的回调方法

    众所周知,在android里面充斥着众多的监听器,如一个按钮具有的OnClickListener,能对按钮的点击事件进行监听,这些监听器通常是一个接口,我们可以通过实现接口里的回调方法,执行事件处理. ...

  4. 坑死人不偿命之微信支付回调

    Thinkphp集成微信支付SDK 遇到微信回调无法获取回调参数,导致重写的回调函数无法执行的问题 xml= xml = GLOBALS['HTTP_RAW_POST_DATA'];//无法获取参数 ...

  5. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  6. 嵌入式jetty的HTTP实现

    http://www.cnblogs.com/zzt-lovelinlin/p/5275168.html 2.1 简单HTTP实现 2.1.1 HTTP SERVER端实现 2.1.1.1 HTTP ...

  7. python3爬虫实例-python3 网络爬虫 实例1

    scrapy pip install scrapy pip install pyOpenSSL pip install cryptography pip install CFFI pip instal ...

  8. android四大组件 服务,Android四大组件之Service

    Service Service(服务)是一个可以在后台执行长时间运行操作而不使用用户界面的应用组件.服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行. 此外,组件可以绑定到 ...

  9. Service的理解和使用

    首先推荐一下郭林大神所讲的这一节的博客:http://blog.csdn.net/guolin_blog/article/details/11952435 下面结合我对这一部分的学习,自己做一个小节. ...

最新文章

  1. C# 父类类型引用子类的实例理解
  2. swagger error: Conflicting schemaIds: Duplicate schemaIds detected for types A and B
  3. 用MathType编辑带点星号的流程
  4. python快速部署一个服务器_Python加Shell快速部署集群
  5. Hadoop 面试题之Hbase
  6. 帆软报表(finereport)使用Event 事件对象 (target)修改提示框样式
  7. JSONP 跨域共享信息
  8. linux ptrace 读内存,Linux高级调试与优化——ptrace
  9. Linux学习笔记-子目录的支持
  10. Win10+Ubuntu16.04双系统安装教程
  11. IOS开发之Storyboard应用
  12. 学习:java原理—反射机制
  13. 炸掉卡西欧991CNX
  14. 串口(USART)通信-串口通讯协议简介
  15. xshell 4 中文乱码问题解决
  16. 计算机对舞蹈影响,计算机技术在舞蹈教学中的应用
  17. android 动态库符号表,Android NDK隐藏jni动态库的内部符号表
  18. 一步一步搭建自己的web系统(一):搭建后端服务
  19. vuejs中用require引入图片,出现ReferenceError: require is not defined
  20. SpaceShooter打飞机教程笔记(一)

热门文章

  1. 三校生计算机题目及答案,“三校生”对口升学计算机应用试卷计算机基础知识(含答案)...
  2. 以太坊网络区块浏览器blocksout技术简要分析
  3. 便携式CAN分析仪的使用
  4. C语言100以内的素数
  5. 现代计算机模型要求程序在执行前,大学计算机基础考试考点
  6. 小白用户也能看懂的卷积神经网络5
  7. markdown导出以及合并pdf
  8. 编写一个简单的汇编程序(DOSBox 0.74和MASM 6.15)
  9. 做最漂亮的玩Android小程序第三版
  10. 黑盒测试方法之正交实验法