PreTranslateMessage(MSG* pMsg) 中 break 与return的区别
来源:互联网 发布:人工蜂群算法和粒子群 编辑:程序博客网 时间:2024/05/29 19:05
程序一:
BOOL CMyRichEditView::PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类if (pMsg->message==WM_KEYDOWN){switch (pMsg->wParam){case VK_DOWN:case VK_LEFT:case VK_RIGHT:{ CImageView * pView=(CImageView* )(((CMainFrame *)AfxGetMainWnd())->m_wndSplitter.GetPane(0,1));pView->SendMessage(WM_KEYDOWN,pMsg->wParam,pMsg->lParam);}break; //此处是关键default:break;}}return CRichEditView::PreTranslateMessage(pMsg);}
程序二:
BOOL CMyRichEditView::PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类if (pMsg->message==WM_KEYDOWN){switch (pMsg->wParam){case VK_DOWN:case VK_LEFT:case VK_RIGHT:{ CImageView * pView=(CImageView* )(((CMainFrame *)AfxGetMainWnd())->m_wndSplitter.GetPane(0,1));pView->SendMessage(WM_KEYDOWN,pMsg->wParam,pMsg->lParam);}return TRUE; //此处是关键default:break;}}return CRichEditView::PreTranslateMessage(pMsg);}
在使用程序一时,发现消息虽然发送到CImageView中处理去了,但自身也在处理这个消息。
改为程序二时,消息就只在CImageView中处理了,自身不再处理此消息
分析到消息的流向,再去找原因就简单了。
从这个例子中也可很明显的看出break与return的区别
break只是中断switch,消息中断Switch之后,此消息执行SWITCH语句之后的内容 return CRichEditView::PreTranslateMessage(pMsg);
故而,消息又传到了自身。
而使用retrun后,则将消息进行了截留,消息传到别的类中处理后,直接退出返回,不再向自身发送消息了。 因此,使用return后,自身不再响应该消息
同时,由程序一执行结果可以看出:
系统先将SendMessage发送出去的消息放入消息队列中,然后再将发送到自身的该消息放入队列中
所以,执行时,系统先执行发送到CImageView的消息,然后再执行发送到自身的该消息。
- PreTranslateMessage(MSG* pMsg) 中 break 与return的区别
- WM_MOUSEWHEEL 在PreTranslateMessage(MSG* pMsg)中MSG 的说明
- CTrackThread::PreTranslateMessage(MSG* pMsg)
- CTrackThread::PreTranslateMessage(MSG* pMsg)
- 使用PreTranslateMessage(MSG* pMsg)截获键盘数字键
- MFC PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口问题
- 重写PreTranslateMessage(MSG* pMsg)遇到的问题--相应右键消息。隔一次响应一次,求解。
- return与break的区别
- return与break的区别
- return与break的区别
- 函数右括号错误! PreTranslateMessage(MSG* pMsg)未返回
- java 中break、continue、return之间的区别与联系
- Java中break、continue与return的区别
- break continue return的区别与使用
- exit,continue,return与break的区别
- return,continue,break的用法与区别
- return,continue,break 的用法与区别
- break、return与continue的区别.
- Flex:Web报表引擎——MyReport 2.6.2.0新功能
- 中国“神舟八号”飞船在酒泉发射升空
- Android 错误 The method onClick(View) of type new View.OnClickListener(){} must override a superclass
- 动态链接库与静态链接库的区别
- tlb、tlh和tli文件的关系
- PreTranslateMessage(MSG* pMsg) 中 break 与return的区别
- delphi TMemoryStream对象用法
- JSP学习笔记之六
- glib学习笔记之二——GLib核心应用支持:The Main Event Loop
- Cisco配置DHCP中继代理
- Serialize an object using XMLTag(s): XML(JAVA对象序列化成XML)
- 如何使用silverlight加载动态库(dll)并发布到IIS7
- flex中的css应用
- 如何学习技术?