几个模拟OLE事件注册、调用的宏
2024-08-28 00:15:54
最近遇到一个要求,将原来的OCX控件,替换成直接的DLL调用。
遇到OLE的事件回调,写了三个宏,用于简化代码
#define OLE_ENVENT_IN_CLASS_ONE(event_name, func_ret_type, param_type , param_name) \
public: \
typedef struct event_name##Struct { \
CWnd* pThis; \
void (CWnd::* event_name##Callback)( param_type param_name ); \
} event_name##Struct; \
protected: \
event_name##Struct __ole_event_##event_name##StructSt; \
public: \
void _Ole_Event_Set##event_name(const event_name##Struct stCallback) { __ole_event_##event_name##StructSt = stCallback;}; \
func_ret_type _Ole_Event_Call##event_name ( param_type param_name ) { \
if (NULL != __ole_event_##event_name##StructSt . event_name##Callback) { \
(__ole_event_##event_name##StructSt .pThis ->* __ole_event_##event_name##StructSt.event_name##Callback)( param_name ); \
} \
}; #define CALL_OLE_EVENT(event_name, param_name) \
_Ole_Event_Call##event_name(param_name); #define SET_OLE_EVENT_TO_OBJ(event_class, event_name, event_obj, pThis, func_name, param_type , param_name ) \
event_class :: event_name##Struct __temp_ole_event_set##event_name = {(CWnd*)pThis, (void (CWnd::* )( param_type param_name )) & func_name }; \
(event_obj) -> _Ole_Event_Set##event_name( __temp_ole_event_set##event_name );
在类定义中,插入相应的事件
OLE_ENVENT_IN_CLASS_ONE(EventCallback, void, LPCTSTR, content)
事件调用处如此执行
void cwDetectCallback(LPCTSTR content)
{
#ifndef CW_LIB_DEF
FireEvent(eventidcwDetectCallback, EVENT_PARAM(VTS_BSTR), content);
#else
CALL_OLE_EVENT(EventCallback, content);
#endif
}
调用处,原OLE控件初始化处,如下设置
auto ret = activex_.cwInitControl(_T("")); //模拟事件调用
SET_OLE_EVENT_TO_OBJ(CStrCloudWalkControlCtrl, EventCallback, &activex_, this, CCloudWalkLiveDetectDlg::OnLiveDetectCallbackFunc, LPCTSTR, content);
回调函数正常定义。
最新文章
- CentOS7.2 创建本地YUM源和局域网YUM源
- Java Hour 29 Weather ( 2 ) Maven
- RDO部署openstack(2)
- 分页写入文件,第二次分页前一定要关闭IO流啊。。否则文件写不全。。- -粗心
- IntelliJ IDEA的下载、安装和WordCount的初步使用(本地模式和集群模式)
- 用Visual Studio创建集成了gtest的命令行工程
- 图片输出onerror事件
- css-选择器-优先级
- HD1083 二分图,匈牙利算法
- 如何关闭IE浏览器在生成原型时候的安全警告
- BZOJ_4518_[Sdoi2016]征途_斜率优化
- 局部敏感哈希(LSH)之simhash和minhash
- spring启动component-scan类扫描加载过程(转)
- Java学习NO.4
- [转]启动container的时候出现iptables: No chain/target/match by that name
- leetcode 704. Binary Search 、35. Search Insert Position 、278. First Bad Version
- Linux 网卡驱动学习(五)(收发包具体过程)【转】
- windows copy 和xcopy
- Booting dircetly into Redlink FW from flash
- Web开发框架趋势
热门文章
- Android 开发环境部署
- 七、latex中的插图
- 出现( linker command failed with exit code 1)错误总结(http://blog.csdn.net/hengshujiyi/article/details/21182813)
- STM32 总线
- 03python面向对象编程之Python中单下划线和双下划线的区别7
- “HTTP 错误 404.15 - Not Found 请求筛选模块被配置为拒绝包含的查询字符串过长的请求”之解决办法
- .Net 网站配置文件 webconfig 配置。 字体图标+视频播放 以及 文件上传
- lua脚本入门
- luogu 5471 [NOI2019]弹跳 KDtree + Dijkstra
- AC自动机及其模板