转载:VC中如何响应键盘和鼠标事件

VC 中用 KeyPress 表示键盘响应的所有事件,包括 OnKeyDown 事件(键按下)、 OnKeyUp 事件(键按下后弹起)和 OnKeyPress 事件(按了某个键)。
OnKeyuUp 事件的语法为 void Object1:: OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );
OnKeyDown 事件的语法为 void Object1:: OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
这里参数 nChar 代表的是键盘上各键的代码,是编写程序时必须要写明的,而参数 nRepCnt, 和 nFlags 则可以使用默认值而不必编写。
下面说明 VC 的 KeyPress 事件中的 nChar 代码与键盘中各键的对应关系:
VK_0 到 VK_9 表示键盘上数字“ 0 ”到“ 9 ”键 (ASCII 码为 0x30 - 0x39) ;
VK_A 到 VK_Z 表示键盘上字母“ A ”到“ Z ”键 (ASCII 码为 0x41 - 0x5a) ;
VK_ADD 表示数字键盘上的“ + ”键。
VK_ALT 表示键盘上 “ ALT ”键。
VK_BACK_QUOTE 表示键盘上 “ ` ”键。
VK_BACK_SLASH 表示键盘上 “ \ ”键。
VK_BACK_SPACE 表示键盘上 “ BACKSPACE “键。
VK_CAPS_LOCK 表示键盘上 “ CAPS LOCK ”键。
VK_CLOSE_BRACKET 表示键盘上 “ ] ”键。
VK_COMMA 表示键盘上 “ , ”键。
VK_CONTROL 表示键盘上 “ CTRL ”键。
VK_DECIMAL 表示数字键盘上 “ . ”键。
VK_DELETE 表示键盘上 “ DELETE ”键。
VK_DIVIDE 表示键盘上 “ / ”键。
VK_DOWN 表示键盘上 “向下箭头”键。
VK_END 表示键盘上 “ END ”键。
VK_ENTER 表示键盘上 “ ENTER ”键。
VK_EQUALS 表示键盘上 “=”键。
VK_ESCAPE 表示键盘上 “ ESC ”键。
VK_F1 到 VK_F12 表示键盘上 “ F1 ”到“ F12 ”键。
VK_HOME 表示键盘上 “ HOME ”键。
VK_INSERT 表示键盘上 “ INSTERT ”键。
VK_LEFT 表示键盘上 “向左箭头”键。
VK_MULTIPLY 表示键盘上 “ * ”键。
VK_NUMPAD0 到 VK_NUMPAD9 表示数字键盘上 “ 0 ”到“ 9 ”键。
VK_OPEN_BRACKET 表示键盘上 “ [ ”键。
VK_PAGE_DOWN 表示键盘上 “ PAGE DOWN ”键。
VK_PAGE_UP 表示键盘上 “ PAGE UP ”键。
VK_PAUSE 表示键盘上 “ PAUSE ”键。
VK_PRINTSCREEN 表示键盘上 “ PRINT SCREEN ”键。
VK_RIGHT 表示键盘上 “向右箭头”键。
VK_SCROLL_LOCK 表示键盘上 “ SCROLL LOCK ”键。
VK_SEMICOLON 表示键盘上 “;”键。
VK_SHIFT 表示键盘上 “ SHIFT ”键。
VK_SPACE 表示键盘上 “ SPACEBAR ”键。
VK_SUBTRACT 表示键盘上 “-”键。
VK_TAB 表示键盘上 “ TAB ”键。
VK_UP 表示键盘上 “向上箭头”键。
用键盘在人机交互中完成对屏幕中物体位置移动的控制功能时常会用到上、下、左、右几个方向键。下面的程序可以完成对某一可视控件 Object1 的位置进行控制(分别按下上、下、左、右键使其分别向上、下、左、右方向移动 5 个屏幕单位):
{
CWnd::OnKeyDown(UINT nChar, UINT nRecpCnt, UNIT nFlages);
Switch(nChar)
{
case VK_LEFT;
Object1.left=Object1.left-5; // 按下左键控件左移 5 个单位
break;
case VK_RIGHT;
Object1.left=Object1.left+5; // 按下右键控件右移 5 个单位
break;
case VK_UP;
Object1.top=Object1.top-5; // 按下上键控件上移 5 个单位
break;
case VK_DOWN;
Object1.top=Object1.top+5; // 按下下键控件下移 5 个单位
break;
defult:
break;
}

2. 对鼠标的响应
VC 中对鼠标的响应常用的有以下事件:
a. OnLButtonDblClk :语法为 void Object1 Wnd :: OnLButtonDblClk( UINT nFlags, CPoint point ){} ,表示控件对双击鼠标左键时的响应。
b. OnLButtonDown :语法为 void Object1 Wnd :: OnLButtonDown( UINT nFlags, CPoint point ){} ,表示控件对按下鼠标左键时的响应。
c. OnLButtonUp :语法为 void Object1 Wnd :: OnLButtonUp( UINT nFlags, CPoint point ){} ,表示控件对按下的鼠标左键放开后的响应。
d. OnRButtonDblClk :语法为 void Object1 Wnd :: OnRButtonDblClk( UINT nFlags, CPoint point ){} ,表示控件对双击鼠标右键时的响应。
e. OnRButtonDown :语法为 void Object1 Wnd :: OnRButtonDown( UINT nFlags, CPoint point ){} ,表示控件对按下鼠标右键时的响应。
f. OnRButtonUp :语法为 void Object1 Wnd :: OnRButtonUp( UINT nFlags, CPoint point ){} ,表示控件对按下的鼠标右键放开后的响应。
其中的参数 nFlags 用于指示按下的键的代码,它可以是下面的几个值或它们的组合:
MK_CONTROL 表示按下 CTRL 键 ;
MK_LBUTTON 表示按下鼠标左键;
MK_MBUTTON 表示按下鼠标中键;
MK_RBUTTON 表示按下鼠标右键;
MK_SHIFT 表示按下 SHIFT 键;
Point 参数表示鼠标的光标位置相对于所在窗口的左上角的水平和垂直坐标值。
在 VC 中用鼠标响应事件来完成人机交互中的控制功能是比较容易的。例如把一个控件 Object1 的位置移动到鼠标光标的位置,下面简单的程序就可完成:
void Object1::OnLButtonDown(UINT nFlags, CPoint point)
{
CPoint Position ;
Position = point;
Object1->left=Position.x;
Object1->top=Position.y; // 按下鼠标左键后控件的水平和垂直方向的值分别与鼠标的光标位置一致

}

VC中键盘键的对应关系的更多相关文章

  1. js中键盘按键对应的键值

    js键盘键值 keycode    8 = BackSpace BackSpace  keycode    9 = Tab Tab  keycode   12 = Clear  keycode   1 ...

  2. VC++中开发汇编语言(转)

    汇编程序结构 一个显示字符串的汇编程序 程序格式 一.模式定义 二.includelib语句 三.函数声明语句 四.数据和代码部分 Visual C/C++环境 建立工程 汇编程序的调试 一.设置断点 ...

  3. C++Builder 中 Enter键或者Tab键无效

    VC++中或者C++Builder中 当回车键不能换行时应该就是因为自己不小心按到了键盘上的insert键,要想恢复只需要再按一下就可以了. 小经验

  4. VC++学习之VC中常见问题

    VC++学习之VC中常见问题 (1)为什么某个类突然在工作区间里面突然看不见了? 只是类隐藏了,打开FILEVIEW,找到隐藏类的头文件,随便敲一下键盘的空格键,类就会在CLASSVIEW中显示了 ( ...

  5. VC中GetLastError()获取错误信息的使用,以及错误代码的含义

    转载:http://www.seacha.com/article.php/knowledge/windows/mfc/2011/0423/335.html VC中GetLastError()获取错误信 ...

  6. 深度解析VC中的消息传递机制

    摘要:Windows编程和Dos编程,一个很大的区别就是,Windows编程是事件驱动,消息传递的.所以,要学好Windows编程,必须 对消息机制有一个清楚的认识,本文希望能够对消息的传递做一个全面 ...

  7. 深度解析VC中的消息

    消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情 ...

  8. 深度解析VC中的消息(转发)

    http://blog.csdn.net/chenlycly/article/details/7586067 这篇转发的文章总结的比较好,但是没有告诉我为什么ON_MESSAGE的返回值必须是LRES ...

  9. VC 模拟键盘输入

    转载请注明来源:https://www.cnblogs.com/hookjc/ vc模拟键盘输入keybd_event(VK_LWIN, 0, 0 ,0);keybd_event('M', 0, 0 ...

随机推荐

  1. Java并发之synchronized深入

    一句话总结synchronized: JVM会自动通过使用monitor来加锁和解锁,保证了同时只有一个线程可以执行指定代码,从而保证了线程安全,同时具有可重入和不可中断的性质. 一.synchron ...

  2. 图 Graph-图的相关算法

    2018-03-06 17:42:02 一.最短路问题 问题描述:在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径. 这条路径就是两点之间的最短路径 (Shortest Path ...

  3. em和px的区别一次彻底搞清楚!

    在国内网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位.只有百度好歹做了个可调的表率.而 在大洋彼岸,几乎所有的主流站点都使用em作为字体单位, ...

  4. 使用ASP.NET 的缓存机制的示例

    if (HttpContext.Current.Cache["code_" + CodeType] == null) { SysCodeService codeService = ...

  5. Docker 生态

    Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker 自从发布以来发生了很多的变化,并且有些 ...

  6. 【MySQL】CSV 文件导入MySQL

    此问题是前几天整理数据的时候碰到的,数据存在 CSV文件中(200多万记录),通过python 往数据库中导入太慢了,后来使用MySQL 中自带的命令 LOAD DATA INFILE, 30多秒就能 ...

  7. vue项目搭建 (二) axios 封装篇

    vue项目搭建 (二) axios 封装篇 项目布局 vue-cli构建初始项目后,在src中进行增删修改 // 此处是模仿github上 bailicangdu 的 ├── src | ├── ap ...

  8. C++复习9.面向对象编程

    C++ 面向对象编程概述 20131001 一些基本概念:封装.继承.组合.虚函数.抽象基类.动态绑定.多态性等等 1.一个笑话:如果坐在后排聊天的同学能够像中间打牌的同学那样安静的话,那么就不会影响 ...

  9. Qt出现QObject::connect: Cannot queue arguments of type '******'的解决方法

    一般出现这种情况都是自定义的类型进行型号槽连接的时候出现的,使用 假设自定义的类型是MyClass 使用qRegisterMetaType<MyClass>("MyClass&q ...

  10. Python3的基础语法(四)

    1,编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 当然你也可以为源码文件指定不同的编码: # -*- coding: cp-1252 -* ...