对话框的按键处理 PreTranslateMessage、OnKeyDown和OnChar

1、MFC对话框不能响应OnKeyDown和OnChar函数
(1)现象
  在MFC的对话框中,映射了WM_CHAR   和WM_KEYDOWN   消息后,但是对话框不能响应OnKeyDown和OnChar函数
(2)原因
  因为MFC在进行设计的时候,这两个消息被对话框上的控件截获了,不能到达这两个消息响应函数,对于OnKeyDown来说,只要把对话框上的控件都删除了,就可以接收到WM_KEYDOWN消息,但是还是接收不到WM_CHAR消息
(3)解决
  重载PreTranslateMessage这个函数;在里面加上SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);这一句后,对话框的OnKeyDown和OnChar函数就生效了。OnKeyDown在OnChar之前处理。

2.WM_KEYDOWN、WM_KEYUP和WM_CHAR
三个消息的执行顺序为WM_KEYDOWN、WM_CHAR、WM_KEYUP

3.在MFC的单文档应用程序,而已直接提取按键内容。

4.如果处理方向按键,如下:

方向键(←): VK_LEFT (37)
方向键(↑): VK_UP (38)
方向键(→): VK_RIGHT (39)
方向键(↓): VK_DOWN (40)

响应WM_KEYDOWN

 void CXXXXView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(VK_LEFT==nChar)
{
MessageBox("xxx");
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

对话框的按键处理 PreTranslateMessage、OnKeyDown和OnChar的更多相关文章

  1. 关于对话框不能响应OnKeyDown和OnChar函数的一些说明

    (1)现象  在MFC的对话框中,映射了WM_CHAR和WM_KEYDOWN消息响应函数后,还是不能响应OnKeyDown和OnChar. (2)原因  因为MFC在进行设计的时候,这两个消息被对话框 ...

  2. andriod 手机按键检测事件 onKeyDown() 简述

    函数原型: public boolean onKeyDown(int keyCode, KeyEvent event); 第一个参数是用户按下键时,当前所接收到的按键代号: 第二个参数是按键事件的对象 ...

  3. MFC 对话框响应OnChar()

    最近在写程序时,出现了对话框里面不接收键盘消息的情况,特别搜索了以下内容 MFC中对话框是不会直接响应OnChar和OnKeyDown消息的,会被 其它控件拦截,测试时发现不会进入这两个函数,必须重定 ...

  4. JavaScript onkeydown事件入门实例(键盘某个按键被按下)

    JavaScript onkeydown 事件 用户按下一个键盘按键时会触发 onkeydown 事件.与 onkeypress事件不同的是,onkeydown 事件是响应任意键按下的处理(包括功能键 ...

  5. js获取及判断按键的方法

    js 里面的键盘事件经常用到,所以收集了键盘事件对应的键码来分享下: keyCode 8 = BackSpace BackSpace keyCode 9 = Tab Tab keyCode 12 = ...

  6. Android按键事件传递流程(二)

    5    应用层如何从Framework层接收按键事件 由3.2和4.5.4节可知,当InputDispatcher通过服务端管道向socket文件描述符发送消息后,epoll机制监听到了I/O事件, ...

  7. JS鼠标滑轮事件的写法和按键的事件

    在body注册一下滑轮事件 <body onload="win_onload();"></body> 然后JS代码如下: function win_onlo ...

  8. Jquery页面中添加键盘按键事件,如ESC事件

    $(document).keydown(function(event){ if(event.keyCode == 38 || event.keyCode == 104){ i--; if(i<= ...

  9. MFC对话框的Edit控件实现响应Ctrl+A全选,并实现自动/手动换行+滚动条

    首先是在Properties中设置控件属性的问题,首先必须得将Mutilines属性设为true,才能支持多行显示. 手动换行(按Enter键换行):将Want Return属性设为true 自动换行 ...

随机推荐

  1. linux 下 安装nginx及压力测试

    linux 编译安装nginx,配置自启动脚本 下载nginx: wget http://nginx.org/download/nginx-1.8.0.tar.gz下载openssl : wget h ...

  2. TLS/SSL 协议详解 ssL 、TLS 1.0、TLS 1.1、TLS 1.2的了解

    TLS 1.0 RFC http://www.ietf.org/rfc/rfc2246.txt TLS 1.1 RFC http://www.ietf.org/rfc/rfc4346.txt TLS ...

  3. Zabbix安装(server和agent)及基本配置

    简介 zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制 ...

  4. Mysql操作日志

    任何一种数据库中,都有各种各样的日志.MySQL也不例外,在Mysql中有4种不同的日志.分别错误日志.二进制日志.查询日志和慢查询日志.这些日志记录着Mysql数据库不同方面的踪迹.下文将介绍这4种 ...

  5. Codeforces 1136E Nastya Hasn't Written a Legend (线段树教做人系列)

    题意:有一个数组a和一个数组k,数组a一直保持一个性质:a[i + 1] >= a[i] + k[i].有两种操作:1,给某个元素加上x,但是加上之后要保持数组a的性质.比如a[i]加上x之后, ...

  6. actionView

    类似于actionBar也是在导航栏里用但是他使用的是menu菜单设置菜单项的AsAction=“always|withText” 本例使用LoaderCallbacks<Cursor>接 ...

  7. Docker commit 制作weblogic镜像

    第一:前提条件 1.本机必须已经安装了docker 容器 2.pull 一个基础的镜像  如图:rastasheep/ubuntu-sshd 第二:利用docker commit  命令 将容器的状态 ...

  8. tp中url地址大小写问题

    在tp配置文件中有一个URL_CASE_INSENSITIVE选项,设置为true,表示大小写不敏感. 'URL_CASE_INSENSITIVE' => true

  9. install package

    http://www.michael-noll.com/blog/2014/03/17/wirbelsturm-one-click-deploy-storm-kafka-clusters-with-v ...

  10. Linux wget命令

    一.简介 wget是一个Linux系统中的下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS ...