zoukankan      html  css  js  c++  java
  • 几个模拟OLE事件注册、调用的宏

    最近遇到一个要求,将原来的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);

    回调函数正常定义。

  • 相关阅读:
    css 两边是线,中间文字的多种实现方法
    vue provide/inject 父组件如何给孙子组件传值
    Mac版本的 Axure rp8 不显示菜单栏
    mac 如何卸载node和npm采坑之旅
    css3 鼠标悬停图片动画
    css3 一个六边形 和 放大旋转动画DEMO演示
    js drag drop 收藏夹拖拽移除的简单例子
    css 折角效果/切角效果
    css 给图片添加滤镜效果,透明层毛玻璃效果
    c# udp通讯实现
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/11124787.html
Copyright © 2011-2022 走看看