VS2013MFC中回调函数的使用&出现的问题
来源:互联网 发布:淘宝客手机可以开通吗 编辑:程序博客网 时间:2024/05/22 03:04
要在MFC类的成员函数中写一个回调函数,首先要了解什么是回调函数。
回调函数就是函数指针的调用,在一个函数写成指针的形式,在另一个函数中可以把那个写成指针形式的函数当成参数来使用。通常情况是在动态库函数里定义好回调函数的形式,然后在封装的函数里注册回调函数。
这个时候在自己的工程中按照库函数头文件中定义回调函数的格式来定义函数。然后调用动态库中的注册的回调函数的参数里就可以直接使用自己定义的回调函数。
这里概念参考回调函数的那些事儿,写的比较易懂。
接下来说我使用过程中出现的几个问题:
1.回调函数定义时一定要和库函数中的定义完成一致。
我使用的库中回调函数定义为
typedef BOOLEAN(__stdcall *XXX_CALLBACK)(unsigned char*cXXX, unsigned long uXXX);
我在我的工程时定义没有加__stdcall,这个错误找了好久才找到。
2.回调函数在MFC类中只能是静态函数或者全局函数
这样会有个问题,那就是没有直接使用当前类中的控件。我是使用的回调函数中使用MFC类的成员或对话框控件的简单方法中的方式。但是没有办法直接调用StatusBar类来显示。现在还有个问题,没法获取tab子窗口的句柄,来操作子窗口中的控件。网上有说采用发送消息的方式,可是回调函数在库文件中已经定义好了,不能再修改。没法通过参数发送消息的方法。现在使用的方法是设置全局变量来传递参数,不推荐这种方式。
3.在子窗口中使用回调函数
我是在主窗口类中定义的静态回调函数,要在几个tab子窗口中同时使用。在使用的时候就不能直接把主窗口中定义的回掉函数名传递给注册回调函数了。这时必须得先在子窗口中获取主窗口的句柄才能使用主窗口类中的成员。
在这里我使用的
CXXXDlg *pdlg = (CXXXDlg*)GetParent()->GetParent();
参考文章:
玩转VC++实现CallBack
C/C++之回调函数
- VS2013MFC中回调函数的使用&出现的问题
- Delphi中回调函数的使用
- DELPHI中回调函数的使用
- DELPHI中回调函数的使用
- V3d_View中回调函数的使用
- C++ 中回调函数的使用
- C++中回调函数的使用
- Java中回调函数的使用
- Android中回调函数的使用
- Javascript中回调函数的使用
- 关于进行ajax中error回调函数出现XMLHttpRequest status = 0的问题
- 解决使用ajaxFileUpload上传控件出现的问题:回调函数总是进入error或success
- 回调函数中出现的警告去除方法
- 回调函数的使用
- 回调函数的使用
- 回调函数的使用
- 回调函数的使用
- 回调函数的使用
- 关于迟到和时间管理-来自东月的一篇检讨
- 深度学习岗位面试问题整理笔记
- Redis配置
- php 缩略图 封装一个方法
- 源码解析-getDefault-register过程
- VS2013MFC中回调函数的使用&出现的问题
- Android Theme 主题总结
- python字符串questions中插入" . "的所有情况
- Latex 同时上下标
- java常用的设计模式
- 高层管理者(笔记)——任务、组织与战略
- 在面板上移动的字
- Mysql数据库备份(一)------数据库备份和表备份
- form设置margin:0px auto不生效