DuiLib(4)——消息响应
来源:互联网 发布:淘宝违规宝贝怎么删除 编辑:程序博客网 时间:2024/06/05 02:31
Duilib类似MFC的消息响应如下:
DUI_DECLARE_MESSAGE_MAP()DUI_BEGIN_MESSAGE_MAP(CYmChatUI, CXMLWnd)DUI_ON_MSGTYPE(DUI_MSGTYPE_CLICK, OnClick)DUI_END_MESSAGE_MAP()
绑定消息响应函数:DUI_ON_MSGTYPE(DUI_MSGTYPE_CLICK, OnClick)
其他的消息类型如下,用法雷同:
#define DUI_MSGTYPE_MENU (_T("menu"))#define DUI_MSGTYPE_LINK (_T("link"))#define DUI_MSGTYPE_TIMER (_T("timer"))#define DUI_MSGTYPE_CLICK (_T("click"))#define DUI_MSGTYPE_RETURN (_T("return"))#define DUI_MSGTYPE_SCROLL (_T("scroll"))#define DUI_MSGTYPE_DROPDOWN (_T("dropdown"))#define DUI_MSGTYPE_SETFOCUS (_T("setfocus"))#define DUI_MSGTYPE_KILLFOCUS (_T("killfocus"))#define DUI_MSGTYPE_ITEMCLICK (_T("itemclick"))#define DUI_MSGTYPE_TABSELECT (_T("tabselect"))#define DUI_MSGTYPE_ITEMSELECT (_T("itemselect"))#define DUI_MSGTYPE_ITEMEXPAND (_T("itemexpand"))#define DUI_MSGTYPE_WINDOWINIT (_T("windowinit"))#define DUI_MSGTYPE_BUTTONDOWN (_T("buttondown"))#define DUI_MSGTYPE_MOUSEENTER (_T("mouseenter"))#define DUI_MSGTYPE_MOUSELEAVE (_T("mouseleave"))#define DUI_MSGTYPE_TEXTCHANGED (_T("textchanged"))#define DUI_MSGTYPE_HEADERCLICK (_T("headerclick"))#define DUI_MSGTYPE_ITEMDBCLICK (_T("itemdbclick"))#define DUI_MSGTYPE_SHOWACTIVEX (_T("showactivex"))#define DUI_MSGTYPE_ITEMCOLLAPSE (_T("itemcollapse"))#define DUI_MSGTYPE_ITEMACTIVATE (_T("itemactivate"))#define DUI_MSGTYPE_VALUECHANGED (_T("valuechanged"))#define DUI_MSGTYPE_SELECTCHANGED (_T("selectchanged"))
也可以具体到是什么事件,什么控件,映射到某个函数
//定义消息类型--执行函数宏#define DUI_ON_MSGTYPE(msgtype, memberFxn) \{ msgtype, _T(""), DuiSig_vn, (DUI_PMSG)&memberFxn}, \//定义消息类型--控件名称--执行函数宏#define DUI_ON_MSGTYPE_CTRNAME(msgtype,ctrname,memberFxn) \{ msgtype, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \//定义click消息的控件名称--执行函数宏#define DUI_ON_CLICK_CTRNAME(ctrname,memberFxn) \{ DUI_MSGTYPE_CLICK, ctrname, DuiSig_vn, (DUI_PMSG)&memberFxn }, \//定义selectchanged消息的控件名称--执行函数宏#define DUI_ON_SELECTCHANGED_CTRNAME(ctrname,memberFxn) \ { DUI_MSGTYPE_SELECTCHANGED,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \//定义killfocus消息的控件名称--执行函数宏#define DUI_ON_KILLFOCUS_CTRNAME(ctrname,memberFxn) \{ DUI_MSGTYPE_KILLFOCUS,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \//定义menu消息的控件名称--执行函数宏#define DUI_ON_MENU_CTRNAME(ctrname,memberFxn) \{ DUI_MSGTYPE_MENU,ctrname,DuiSig_vn,(DUI_PMSG)&memberFxn }, \//定义与控件名称无关的消息宏 //定义timer消息--执行函数宏#define DUI_ON_TIMER() \{ DUI_MSGTYPE_TIMER, _T(""), DuiSig_vn,(DUI_PMSG)&OnTimer }, \
我们也可以在下面的虚函数中写消息响应
virtual void Notify(TNotifyUI& msg);举例如下:
void CYmChatUI::Notify(TNotifyUI& msg){if (msg.sType == _T("click")){if (_tcsicmp(msg.pSender->GetName(), _T("signaturetip")) == 0) {AfxMessageBox(L"点击了name为signaturetip的控件");}}__super::Notify(msg);}
在WindowImplBase这个基类文件中,已经实现了一些常用按钮的响应
比如,最大化,最小化等按钮,只要这些按钮的名字与类中定义的一样即可
(minbtn,maxbtn,restorebtn,closebtn)
而且,WindowImplBase也实现了一些常规消息的响应函数,我们只要继承即可
如下:
//点击事件virtual void OnClick(TNotifyUI& msg);//关闭窗口事件virtual LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//销毁窗口事件virtual LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//窗口尺寸改变时响应此事件virtual LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);//拦截字符响应virtual LRESULT OnChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);//拦截系统消息响应virtual LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);//窗口创建时响应virtual LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);//键盘按下时响应virtual LRESULT OnKeyDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//失去焦点时响应virtual LRESULT OnKillFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//获得焦点时响应virtual LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//左键按下响应virtual LRESULT OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//左键抬起响应virtual LRESULT OnLButtonUp(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//鼠标移动响应virtual LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//鼠标滚轮响应virtual LRESULT OnMouseWheel(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);//鼠标放在控件上响应virtual LRESULT OnMouseHover(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
一、OnClick
void CYmChatUI::OnClick(TNotifyUI& msg){// 获取产生消息的控件名称CDuiString msgName = msg.pSender->GetName();if (_tcsicmp(msgName, _T("friendbtn")) == 0){AfxMessageBox(L"点击了朋友");}else if (_tcsicmp(msgName, _T("groupbtn")) == 0) {AfxMessageBox(L"点击了群组");}__super::OnClick(msg);}
二、OnChar
LRESULT CYmChatUI::OnChar(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {CString strTip;strTip.Format(L"您按了键盘上的%c键", wParam);AfxMessageBox(strTip);return __super::OnChar(uMsg, wParam, lParam, bHandled);}
三、OnClose(窗口要关闭时响应,如按了ESC,或者关闭按钮,或者异常退出时)
LRESULT CYmChatUI::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){AfxMessageBox(L"窗口即将关闭");return __super::OnClose(uMsg, wParam, lParam, bHandled);}
四、OnDestroy(在OnClose之后,会销毁窗口)
LRESULT CYmChatUI::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){AfxMessageBox(L"窗口即将销毁");//发生在OnClose之后return __super::OnDestroy(uMsg, wParam, lParam, bHandled);}
五、OnCreate
LRESULT CYmChatUI::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){AfxMessageBox(L"窗口即将创建,马上显示");//发生在窗口显示出来之前的一霎那return __super::OnCreate(uMsg, wParam, lParam, bHandled);}
六、OnKeyDown
LRESULT CYmChatUI::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){CString strTip;strTip.Format(L"您按了键盘上的%c键", LOWORD(wParam));//如果按了ESC,窗口会退出异常,不知道为什么AfxMessageBox(strTip);return __super::OnChar(uMsg, wParam, lParam, bHandled);}七、OnSize
LRESULT CYmChatUI::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){CString strTip = _T("窗口大小改变了");AfxMessageBox(strTip);return __super::OnSize(uMsg, wParam, lParam, bHandled);}
八、OnLButtonDown
LRESULT CYmChatUI::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){CString strTip;strTip.Format(L"鼠标位置x=%d,y=%d",HIWORD(lParam), LOWORD(lParam));AfxMessageBox(strTip);return __super::OnLButtonDown(uMsg, wParam, lParam, bHandled);}九、OnLButtonUp
LRESULT CYmChatUI::OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){CString strTip;strTip.Format(L"鼠标位置x=%d,y=%d", HIWORD(lParam), LOWORD(lParam));AfxMessageBox(strTip);return __super::OnLButtonDown(uMsg, wParam, lParam, bHandled);}
十、OnMouseMove
LRESULT CYmChatUI::OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){CString strTip;strTip.Format(L"鼠标位置x=%d,y=%d", HIWORD(lParam), LOWORD(lParam));AfxMessageBox(strTip);return __super::OnMouseMove(uMsg, wParam, lParam, bHandled);}
十一、OnMouseWheel
LRESULT CYmChatUI::OnMouseWheel(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){CString strTip;strTip.Format(L"鼠标滚动位置x=%d,y=%d", HIWORD(lParam), LOWORD(lParam));AfxMessageBox(strTip);return __super::OnMouseWheel(uMsg, wParam, lParam, bHandled);}
十二、OnMouseHover
LRESULT CYmChatUI::OnMouseHover(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){CString strTip;strTip.Format(L"鼠标停留的位置x=%d,y=%d", HIWORD(lParam), LOWORD(lParam));AfxMessageBox(strTip);return __super::OnMouseHover(uMsg, wParam, lParam, bHandled);}
十三、OnSysCommand
LRESULT CYmChatUI::OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled){AfxMessageBox(L"触发了系统消息");return __super::OnSysCommand(uMsg, wParam, lParam, bHandled);}
十四、ResponseDefaultKeyEvent
LRESULT CYmChatUI::ResponseDefaultKeyEvent(WPARAM wParam){CString strTip;strTip.Format(L"点击了冷门按键%d,如ESC,ENTER", wParam);AfxMessageBox(strTip);return __super::ResponseDefaultKeyEvent(wParam);}
0 0
- DuiLib(4)——消息响应
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- Duilib扩展—双击、右键消息扩展
- duilib 响应windows原生消息和自定义消息
- duilib---响应windows原生消息和自定义消息
- duilib中各控件响应的消息类型
- duilib中各控件响应的消息类型
- duilib中各控件响应的消息类型
- duilib中类库结构及各控件响应的消息类型
- DuiLib 对键盘消息的处理——ESC、空格键
- Duilib扩展《01》— 双击、右键消息扩展
- Duilib扩展《01》— 双击、右键消息扩展
- Duilib扩展《01》— 双击、右键消息扩展
- Duilib扩展《01》— 双击、右键消息扩展
- Calendar Provider
- ZooKeeper
- 解决vbe6ext.olb不能被加载 内存溢出 问题
- Android 入门三 UI界面
- Hadoop 生态系统中个项目的简介
- DuiLib(4)——消息响应
- 带权重的随机算法
- JavaScript版HashMap的简单实现——通过原型prototype扩展
- [BZOJ1977][BeiJing2010组队]次小生成树 Tree(kruskal+链剖)
- poj1961 kmp失效函数的运用
- Bash Shell脚本:输入时间,输出距离你的生日天数
- josn数据解析,建立定时服务(天气预报demo)
- Javascript中数组的常用方法。
- Java多线程之synchronized及死锁编写