首    页 界面/窗口 网络/通讯 数据库 组件开发 图像/多媒体 NET/Web 其它技术 源码下载 资料下载 软件共享 软件外包 曲艺杂谈
栏目导航:  首    页  |  组件开发  |  ATL   


关于在ATL中自定义消息


原作者:不详    源出处:不详    发布者:施昌权    发布类型:转载    发布日期:2008-08-29

 

        在ATL中自定义消息的机制与MFC类似,使用消息映射。
        消息映射
        为了确保我们能够在CWindowImpl-derived class中处理Windows消息,ATL从抽象基类CMessageMap中继承。CMessageMap声明一个纯虚函数—— ProcessWindowMessage,整个类如下:
        class ATL_NO_VTABLE CMessageMap  
        {  
        public:  
                virtual BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg,  
                WPARAM wParam, LPARAM lParam, LRESULT &lResult, DWORD dwMsgMapID) = 0;  
        };

        你的CWindowImpl-derived class中必须实现ProcessWindowMessage函数,该函数在CWindowImpl基类CWindowImplBaseT中被WindowProc调用。如果ProcessWindowMessage返回TRUE,消息已经被你的基类处理了,WindowProc将不会进行缺省消息处理,如果返回FALSE,WindowProc就会进行缺省消息处理。
        BEGIN_MSG_MAP(CMainFrame)  
                MESSAGE_HANDLER(WM_DESTROY,   OnDestroy)  
        END_MSG_MAP()    

        消息处理者将处理消息或者失败,导致缺省处理。在处理函数被调用之前,句柄参数被缺省置为TRUE。处理函数返回且ProcessWindowMessage退出后,你能够手动将它设置为FALSE( as OnDestroy does)来允许缺省处理。

        针对标准Windows消息、WM_NOTIFY消息和WM_COMMAND消息,ATL有很多消息处理宏供选择,基本宏类型有MESSAGE_HANDLER、NOTIFY_HANDLER和COMMAND_HANDLER。消息队列用相应的宏来处理,比如:MESSAGE_RANGE_HANDLER、NOTIFY_RANGE_HANDLER和COMMAND_RANGE_HANDLER。最简单的增加消息映射处理的方法是在类上面单击右键,从弹出菜单上选择添加Windows消息处理,VC则会插入正确的消息宏。你不能使用类向导添加ATL消息映射处理。下面是有用的消息处理宏的概要:
        MESSAGE_HANDLER映射一个标准Windows消息到一个处理函数。  
        MESSAGE_RANGE_HANDLER映射一批标准Windows消息到一个处理函数。
        COMMAND_HANDLER映射一个WM_COMMAND消息到一个处理函数,比如通知消息、菜单消息、控件消息或者加速键消息。  
        COMMAND_ID_HANDLER映射一批WM_COMMAND消息到一个处理函数,比如通知消息、菜单消息、控件消息或者加速键消息。  
        COMMAND_CODE_HANDLER映射一个WM_COMMAND通知消息到一个处理函数。  
        COMMAND_RANGE_HANDLER映射一批WM_COMMAND通知消息到一个处理函数,比如通知消息、菜单消息、控件消息或者加速键消息。    
        NOTIFY_HANDLER映射一个WM_NOTIFY消息到一个处理函数,比如:通知消息、控件标识。    NOTIFY_ID_HANDLER映射一批WM_NOTIFY消息到一个处理函数,比如:通知消息、控件标识。  
        NOTIFY_CODE_HANDLER 映射一个WM_NOTIFY消息到一个处理函数,比如:通知消息。
        NOTIFY_RANGE_HANDLER映射一批WM_NOTIFY消息到一个处理函数,比如:控件消息。


关于我们 版权声明 广告服务 联系我们 友情链接 加入收藏
站长:施昌权    Email:scq2099yt@163.com    MSN:scq2099yt@live.cn    QQ:14046300    本站QQ群:67202409
Copyright © 2008     卓为VC(www.joyvc.cn)    All Rights Reserved    建议分辨率 1024×768
本站由施昌权制作维护
京ICP备09012297号