MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来。只有穿过消息队列的消息才受PreTranslateMessage()影响,而采用SendMessage()或其他类似的方式向窗口直接发送的而不经过消息队列的消息根本不会理睬PreTranslateMessage()的存在。

一、是否调用TranslateMessage()和DispatchMessage()是由一个名称为PreTranslateMessage()函数的返回值决定的,如果该函数返回TRUE,则不会把该消息分发给窗口函数处理。

二、传给PreTranslateMessage()的消息是未经翻译过的消息,它没有经过TranslateMessage()处理。可以在该函数中使用(pMsg->wParam==VK_RETURN)来拦截回车键。

三、在WindowProc里不能处理WM_Char消息。

四、SetWindowText会发送WM_Char给窗口。

五、PeekMessage和GetMessage的区别:
GetMessage在没有消息的时候等待消息,cpu当然低 
PeekMessage没有消息的时候立刻返回,所以cpu占用率高。 
因为游戏不能靠windows消息驱动,所以要用PeekMessage();

例子:

  1. BOOL CYourWnd::PreTranslateMessage(CMsg *pMsg)
  2. {
  3. if(pMsg->message == WM_KEYDOWN)
  4. {
  5. if(pMsg->wParam == 'A')
  6. {
  7. //......
  8. }
  9. //......
  10. }
  11. if(pMsg->message == WM_KEYUP)
  12. {
  13. int nVirtKey = (int) pMsg->wParam; // virtual-key code
  14. switch(nVirtKey)
  15. {
  16. case VK_UP:
  17. //...
  18. AfxMessageBox("Up");
  19. break;
  20. case VK_DOWN:
  21. //...
  22. AfxMessageBox("Down");
  23. break;
  24. case VK_ESCAPE:
  25. AfxMessageBox("esc");
  26. return TRUE;
  27. break;
  28. }
  29. }
  30. }

CTrackThread::PreTranslateMessage(MSG* pMsg)相关推荐

  1. 使用PreTranslateMessage(MSG* pMsg)截获键盘数字键

    第一种:如果要截获大键盘数字键和小键盘数字键,采用如下方案: PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg-&g ...

  2. MFC 中PreTranslateMessage(MSG* pMsg)截获按钮和编辑框的消息进行预处理

    在类向导自动为对话框添加PreTranslateMessage(MSG* pMsg)函数: BOOL CjilutestDlg::PreTranslateMessage(MSG* pMsg) {    ...

  3. PreTranslateMessage(MSG* pMsg)专题

    .. BOOL CQuickMosaicDlg::PreTranslateMessage(MSG* pMsg) {if (pMsg->message==WM_KEYDOWN) //键盘按下 {i ...

  4. 对话框不响应WM_KEYDOWN消息,可以通过重载BOOL PreTranslateMessage(MSG * pMsg)来实现

    对话框程序中,如果不响应WM_KEYDOWN消息,可以通过重载PreTranslateMessage(MSG* pMsg)来实现 如下例: BOOL CShowImageDlg::PreTransla ...

  5. 函数右括号错误! PreTranslateMessage(MSG* pMsg)未返回

    我用一个模态对话框调dialog1用了另个一个模态对话框dialog2,dialog2只是简单的选择一个数值,然后就自动关闭.然后 ,dialog1使用dialog2的公有成员变量. 最后在这个函数结 ...

  6. MFC PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口问题

    在PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口如下: 1 BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)   ...

  7. PreTranslateMessage(MSG* pMsg) 中 break 与return的区别

    程序一: BOOL CMyRichEditView::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg->me ...

  8. 关于VC的dialog框PreTranslateMessage不响应现象及解决办法

    1.案例情况: 1)dialog动态生成按钮 CButton* pBtn = new CButton();// 定义按钮    CRect rcBtn(10,10,40, 30); //按钮显示位置长 ...

  9. (转)!注意:PreTranslateMessage弹出框出错

    dlg.DoModal()截住了界面消息,所以返回时原来的pMsg的内容已经更改了,消息,窗口句柄都不在是if以前的值了,而且窗口句柄应该是对话框里的子窗口的句柄,所以调用CFrameWnd::Pre ...

最新文章

  1. python怎么找资源_新手Python学习资源哪里找好呢 视频?
  2. checkio的日子(3)
  3. 阿里DataV可视化大屏基本操作
  4. USACO-Section1.3 Milking Cows (区间问题)
  5. 请大家推荐几个快速的.net+sql server2005的虚拟主机
  6. 科大讯飞语音转文字_科大讯飞推出TWS真无线耳机:主打商务沟通,实时语音转文字...
  7. header js修改form_IE9 文件上传表单如何设置自定义header
  8. 中国大学MOOC 视频字幕获取及处理方法
  9. 解决:Elasticsearch failed to map source
  10. FastReport.Net报表工具 vs RDL标准报表定义语言
  11. WdatePicker 诱发 “无法打开站点,已终止操作”错误
  12. Debugger and device times had drifted by more than 60s. Please correct this by running adb shell da
  13. 友宝:掘金生活物联网
  14. 帝国cms缩略图:网站不同地方生成不同的缩略图
  15. win10系统老显卡(AMD Radeon HD 8500M)驱动错误
  16. 通过Iconfont在线调用项目图标
  17. java响铃_android 闹铃(响铃、震动)
  18. python小象学院: BMR------ 基础代谢率1.0
  19. Mybatis学习笔记5——多对一处理、一对多处理
  20. 【Unity Shader入门精要】普通纹理和高级纹理

热门文章

  1. 引领盲返消费新潮流,共创社交电商新时代
  2. 配置nginx.conf证书,实现http跳转htpps(80-->443)
  3. pc计算机含义,pc端游什么意思
  4. AutoSAR系列讲解(实践篇)10.2-EcuM的上下电流程
  5. linux查看nas剩余大小,老徐玩NAS 篇二:我的群晖储存空间哪儿去了——100%破案的教程...
  6. python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论——学霸君
  7. hdu4489(递推)
  8. 一定要跟你喜欢的人去一次“稻城亚丁”好吗!
  9. 【设计模式】建造者模式
  10. Python中文社区征稿,最高1000元/篇!