VC键盘消息大全

win32-鼠标消息键盘消息、计时器消息、菜单资源 阅读详情

在Microsoft Windows 中,键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用。当然,鼠标在今天的应用程序中比10年前使用得更为广泛。甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序,以及Web创览器等程序中就是这样。然而,我们可以不使用鼠标,但绝对不能从一般的PC中拆掉键盘。
  相对于个人计算机的其他组件,键盘有非常久远的历史,它起源于1874年的第一台Remington打字机。早期的计算机程序员用键盘在Hollerith卡片上打孔,以后在哑终端上用键盘直接与大型主机通讯。PC上的键盘在某些方面进行了扩展,包括了功能键、光标定位键和(通常都带有的)单独的数字键盘,但它们的输入原理基本相同。

键盘基础

  Windows程序获得键盘输入的方式:键盘输入以消息的形式传递给程序的窗口过程。实际上,第一次学习消息时,键盘就是一个明显的例子:消息应该传递给应用程序的信息类型。
  Windows用8种不同的消息来传递不同的键盘事件。这好像太多了,但是(就像我们所看到的一样)程序可以忽略其中至少一半的消息而不会有任何问题。并且,在大多数情况下,这些消息中包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是识别出哪些消息是重要的,哪些是不重要的。
一、键盘基础知识
  虽然应用程序在很多情况下可以通过鼠标实现信息的输入,但到现在为止键盘仍然是PC机中不可替代的重要输入设备。
  用键盘当作输入设备,每当用户按下或释放某一个键时,会产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对键盘中断进行处理。KEYBOARD.DRV程序会根据用户的不同操作进行编码,然后调用Windows用户模块USER.EXE生成键盘消息,并将该消息发送到消息队列中等候处理。
1.扫描码和虚拟码
  扫描码对应着键盘上的不同键,每一个键被按下或释放时,都会产生一个唯一的扫描码作为本身的标识。扫描码依赖于具体的硬件设备,即当相同的键被按下或释放时,在不同的机器上可能产生不同的扫描码。在程序中通常使用由Windows系统定义的与具体设备无关的虚拟码。在击键产生扫描码的同时,键盘驱动程序KEYBOARD.DRV截取键的扫描码,然后将其翻译成对应的虚拟码,再将扫描码和虚拟码一齐编码形成键盘消息。所以,最后发送到消息队列的键盘消息中,既包含了扫描码又包含了虚拟码。
  经常使用的虚拟码在WINDOWS.H文件中定义,常用虚拟码的数值、常量符号和含义如表所示。

取值(16进制) 常量符号 含义
01 VK_LBUTTON 鼠标左键
02 VK_RBUTTON 鼠标右键
03 VK_CANCEL Break中断键
04 VK_MBUTTON 鼠标中键
05-07 -- 未定义
08 VK_BACK (BackSpace)键
09 VK_TAB Tab键
0A-0B -- 未定义
0C VK_CLEAR Clear键
0D VK_RETURN Enter键
0E-0F -- 未定义
10 VK_SHIFT Shift键
11 VK_CONTROL Ctrl键
12 VK_MENU Alt键
13 VK_PAUSE Pause键
14 VK_CAPTIAL CapsLock键
15-19 -- 汉字系统保留
1A -- 未定义
1B VK_ESCAPE Esc键
1C-1F -- 汉字系统保留
20 VK_SPACE 空格键
21 VK_PRIOR PageUp键
22 VK_NEXT PageDown键
23 VK_END End键
24 VK_HOME Home键
25 VK_LEFT ←(Left Arrow)键
26 VK_UP ↑(Up Arrow)键
27 VK_RIGHT →(Right Arrow)键
28 VK_DOWN ↓(Down Arrow)键
29 VK_SELECT Select键
2A -- OEM保留
2B VK_EXECUTE Execute键
2C VK_SNAPSHOT Print Screen键
2D VK_INSERT Insert键
2E VK_DELETE Delete键
2F VK_HELP Help键
30-39 VK_0-VK_9 数字键0-9
3A-40 -- 未定义
41-5A VK_A-VK_Z 字母键A-Z
5B-5F -- 未定义
60-69 VK_NUMPAD0-VK_NUMPAD9 小键盘数字键0-9
6A VK_MULTIPLY *(乘号)键
6B VK_ADD +(加号)键
6C VK_SEPAPATOR 分隔符键
6E VK_SUBTRACT -(减号)键
6F VK_DECIMAL .(小数点)键
70-87 VK_DIVIDE /(除号)键
88-8F VK_F1-VK_F24 F1-F24功能键
90 VK_NUMBERLOCK Number lock键
91 VK_SCROLL Scroll lock键
92-B9 -- 未定义
BA-C0 -- OEM保留
C1-DA -- 未定义
DB_E4 -- OEM保留
E5 -- 未定义
E6 -- OEM保留
E7-E8 -- 未定义
E9-F5 -- OEM保留
F6-FE -- 未定义


2.输入焦点
  同一时刻,Windows中可能有多个不同的程序在运行,也就是说有多个窗口同时存在。这时,键盘由多个窗口共享,但只有一个窗口能够接收到键盘消息,这个能够接收键盘消息的窗口被称为拥有输入焦点的窗口。
  拥有输入焦点的窗口应该是当前的活动窗口,或者是活动窗口的子窗口,其标题和边框会以高亮度显示,以区别于其他窗口。拥有输入焦点的也可以是图标而不是窗口,此时,Windows也将消息发送给图标,只是消息的格式略有不同。
  窗口过程可以通过发送WM_SETFOCUS和 WM_KILLFOCUS消息使窗体获得或失去输入焦点。程序也可以通过捕获WM_SETFOCUS和WM_KILLFOCUS消息来判断窗体何时获得或失去输入焦点。其中WM_SETFOCUS消息表示窗口正获得输入焦点,WM_ KILLFOCUS消息表示窗口正失去输入焦点。
3.键盘消息
  键盘消息分为系统键消息和非系统键消息。系统键消息是指由Aft键和其他键组合而产生的按键消息。当系统键被按下时产生WM_ SYSKEYDOWN消息,当系统键被释放时产生WM_SYSKEYUP消息。 Aft键与其他键形成的组合键通常用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间进行切换。因此,系统键消息应该交由Windows进行处理,用户所编制的程序一般不处理系统键消息,而是将这些消息交由DefWindowProc函数进行处理。如果用户想对系统键消息进行处理,应该在处理完这些消息后,再将其发送给DefWindowProc函数,使得Windows系统能够正常工作。
  某些击键消息可以被转换成字符消息,例如字母键、数字键等。而有些键只能产生按键消息而没有字符消息,例如 Shift键、Insert键等。消息循环中的 TranslateMessage函数可以实现从击键消息向字符消息的转化。当GetMessage函数捕获一个WM_SYSKEYDOWN消息或WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息的键是否能够被转换成字符消息,如果能,就将该消息转换成字符消息,再通过DispatchMessape函数将转换后的字符消息发送到消息队列中去。字符消息共有以下四种,如表所示。

字符 系统字符 非系统字符
普通字符 WM_SYSCHAR WM_CHAR
死字符 WM_SYSDEADCHAR WM_DEADCHAR

  其中死字符是由某些特殊键盘上的按键所造成的,Windows一般忽略死字符所产生的消息。
  Windows的消息一般是通过一个MSG结构体变量传送给消息处理函数的。对于键盘消息, MSG结构体变量的各个域中较重要的是lParam域和 wParam域。wParam域用于保存按键的虚拟键代码或字符的ASCII码。对于非字符消息,wParam域保存按键的虚拟健代码;对于字符消息,wParam域不保存字符的ASCII码。lParam域则用于保存击键时产生的附加信息,实际上一个32位的lParam变量被分为六部分,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换状态。lParam域各位的含义如表所示。

位数 含义
0-15 击键重复次数累加
16-23 OEM扫描码
24 是否为扩展键
25-28 未定义
29 是否便用关联键,及Alt键是否同时按下。
30 前一次击键状态,0表示该键前一次状态为抬起,1表示前一次状态为按下
31 转换状态

  按键的次序不同,产生的消息也不相同。例如,按下并释放1键,读过程依次产生如表所示三条消息。按下1键所产生的消息和wParam的取值

消息 wParam变量取值
WM_KEYDOWN 虚拟码1
WM_CHAR ASCII码“1”
WM_KEYUP 虚拟码1

  如果按下Shift键后再按下1键并释放,则依次产生如表所示的消息。按下 Shift键后按 1健所产生的消息和 wParam的取值

消息 wParam变量取值
WM_KEYDOWN 虚拟码 VK_SHIFT
WM_KEYDOWN 虚拟码 VK_1
WM_CHAR ASCII码 “1”
WM_KEYUP 虚拟码 VK_1
WM_KEYUP 虚拟码 VK_SHIFT



ArcGIS对矢量数据进行缓冲区分析和叠加分析具体操作 1、缓冲区分析技术缓冲区是地理空间,目标的一种影响范围或服务范围在尺度上的表现。它是一种因变量,由所研究的要素的形态而发生改变。从数学的角度来看,缓冲区是给定空间对象或集合后获得的它们的领域,而邻域的大小由邻域的半径或缓冲区建立条件来决定,因此对于一个给定的对象A,它的缓冲区可以定义为:(d一般是指欧式距离,也可以是其它的距离, r为邻域半径或缓冲区建立的条件)缓冲区建立的形态多种多样,这是根据缓冲区建立的条件来确定的,常用的对于点状要素有圆形,也有三角形、矩形和环形等; 阅读详情

相关推荐

Arcgis 空间分析—学校选址

空间分析——学校选址

南柯 9126

VC键盘消息大全 VC键盘消息大全

在Microsoft Windows 中,键盘和鼠标是两个标准的用户输入源,在一些交叠的操作中通常相互补充使用。当然,鼠标在今天的应用程序中比10年前使用得更为广泛。甚至在一些应用程序中,我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序,以及Web创览器等程序中就是这样。然而,我们可以不使用鼠标,但绝对不能从一般的PC中拆掉键盘。   相对于个人计算机的其他组件,键盘有非常久远的历史,它起源于1874年的第一台Remington打字机。早期的计算机程序员用键盘在Hollerith卡片上打孔,以后在哑终端上用键盘直接与大型主机通讯。PC上的键盘在某些方面进行了扩展,包括了功能键、光标定位键和(通常都带有的)单独的数字键盘,但它们的输入原理基本相同。

【ArcGIS操作】4 空间分析篇

文章目录1、多图层叠加查询2、土地利用变化分析3、创建闭合线内部缓冲区4、灾害影响缓冲区分析5、气体扩散空间分析 1、多图层叠加查询 基于位置的查询是进行多图层叠加分析的常用功能,突出了地理数据最关键的属性——位置。 按位置查询 目标图层 源图层 空间选择方法 实例 需要导出数据选择的图层 标识导出哪些数据的图层 查询河流经过的网格,目标图层为河流,源图层为网格,选择方法为...

kaitexue 7724

vc++ 读取鼠标 读取键盘信息

读取鼠标在窗口上的X Y 坐标 读取键盘信息

Windows 编程常用键盘消息命令

一个点都和值得研究,这都是皮毛。原文格式很乱,整理ing        1.扫描码与虚拟码   键盘从最早的83键发展到当今流行的101键,虽然增加了许多键,但按键的基本操作保持不变,即按下一个键或释放一个键。按下一个键或释放一个键时,键盘设备就产生一个扫描码(ScanCode),这些扫描码是键盘的物理码,每一个扫描码可以惟一地确定一个按键。不同厂家生产的键盘,其扫描码有可能是不一样的,即

HappyJandun's 学习笔录 3629

vc 手动发送单击按钮消息

PostMessage(m_hWnd,WM_COMMAND,MAKEWPARAM(IDC_BUTTON,BN_CLICKED),NULL);

EnterLly的专栏 1993

从0开发游戏引擎---键盘和鼠标消息

键盘输入以消息的形式传递Windows使用了8种不同的消息来表示各种键盘事件。这看起来可能多了一些,但是(就像我们将要看到的)你的程序忽略掉至少一半的消息是完全可能的。同样,在大多数情况下,你的程序所需要的键盘信息很可能少于这些消息中所编码的信息。处理键盘工作的一部分内容就是要知道哪些消息是重要的,哪些是不必要的。

Frank---7的博客 864

【转载】MFC键盘响应

转载自:传送门 一:首先介绍键盘消息 系统消息: ALT,F1,——F24等,是由系统内部处理的,程序本身就存在,比如F1是帮助键。 WM_SYSKEYDOWN WM_SYSKEYUP WM_SYSCHAR 非系统消息: 是由我们自己加上去的, WM_KEYDOWN WM_KEYUP WM_CHAR 二:然后介绍虚拟键代码 符号形式 十六进制形式 说...

Struggling_Jeff的博客 1251

ArcGis空间分析学习:超市选址分析

通过空间分析确定城市中适宜新建超市的位置(实验理论+实验步骤)

m0_57669695的博客 1万+

(三十)矢量数据的空间分析——缓冲区分析

矢量数据的空间分析——缓冲区分析

qq_42540466的博客 7245

VC++ 获取键盘输入信息(Dll源码+实例)

VC++ 获取键盘输入信息(Dll源码+实例) VC++获取键盘输入信息,本程序由两部分构成,一个是所用Dll的源码,另外一个则是实例,实例要调用编译生成的Dll文件,因此测试前应先编译LaunchDLL,然后把LaunchDLL.h和LaunchDLL.lib复制到KeyHook工程目录中,LaunchDLL.dll复制到Debug目录下。

ArcGIS学习总结(三)——空间分析基本操作

一、介绍 空间数据及其表达 空间数据(也称地理数据)是地理信息系统的一个主要组成部分 。空间数据是指以地球表面空间位置为参照的自然、社会和人文经济景观数据,可以是图形、图像、文字、表格和数字等。它是 GIS 所表达的现实世界经过模型抽象后的内容,一般通过扫描仪、键盘、光盘或其它通讯系统输入 GIS。在某一尺度下,可以用点、线、面、体来表示各类地理空间要素。 有两种基本方法来表示空间数据...

Arcgiser的博客 4万+

【ArcGIS|空间分析】栅格数据缓冲区分析-学校选址

空间分析方法:栅格数据距离制图、成本距离加权、数据重分类、多层面合并 工具:欧氏距离、坡度、重分类、栅格计算器 文章目录1、实验目的2、实验准备2.1数据2.2软件3、技术路线4、实验内容及步骤4.1新学校选址要求4.2数据准备4.2.1 高程数据(dem)4.2.2 土地利用数据(landuse)4.2.3 现有学校数据(school)4.2.4 娱乐场所数据(rec_sites)4.3派生...

kaitexue 2万+

Arcgis中常见的空间分析方法:空间查询与量算、缓冲区分析、叠置分析、网络分析、空间统计与插值以及三维分析与可视化

GIS中常见的空间分析方法包括空间查询与量算、缓冲区分析、叠置分析、网络分析、空间统计与插值以及三维分析与可视化。

Pandas120的博客 8179

arcgis空间分析工具集阐释

密度分析 密度分析是根据输入要素数据计算整个区域的数据聚集状况。 密度分析是通过离散点数据或者线数据进行内插的过程,根据插值原理不同,主要是分为核密度分析和普通的点\线密度分析。核密度分心中,落入搜索区的点具有不同的权重,靠近搜索中心的点或线会被赋予较大的权重,反之,权重较小,它的计算结果分布较平滑。在普通的点\线密度分析中,落在搜索区域内的点或线有相同的权重,先对其求和,再除以搜索区域的大小...

David_jiang 2万+

ArcGIS 空间分析基本操作

空间分析基本操作 这里笔者使用的软件版本是 ArcGIS 10.5 这里写目录标题空间分析基本操作一、前提条件二、空间分析的基本操作1. 了解栅格数据2. 用任意多边形裁剪栅格数据三级目录 一、前提条件 有时候进行空间数据分析会报错,进行空间分析,需要先打开扩展模块,就是Customize→Extensions,检查第二个图扩展模块的扩展是否打开。 二、空间分析的基本操作 1. 了解栅格数据 加载栅格数据,我们可以查看栅格数据的属性。 2. 用任意多边形裁剪栅格数据 三级目录 ...

curve-wreck-ercurve 3671

掌握ArcGIS中的缓冲区分析技术

在讨论矢量数据模型之前,我们先要理解什么是矢量。在GIS领域,矢量数据是指由点、线和面的集合来描述地理特征的数据类型。它们通常与精确的坐标位置相关联,这使得它们在表达地理空间位置时非常准确。点(Point):点数据用于表示具体的位置或者对象,例如一个井的位置。线(Line):线数据表示由多个点顺序连接形成的线状对象,例如河流或道路。面(Polygon):面数据由一系列的线段连接形成封闭区域,表示二维空间,如行政边界或湖泊。

weixin_36231030的博客 1876

Arcgis空间分析——求取一组要素的地理中心

学习arcgis 空间分析中 多点中心的计算,做些笔记 以下大部分内容来自于对arcgis help文档 http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#//005p00000014000000 本文只做学习笔记 工具来自于度量地理分布工具集 度量地理分布工具集用来做什么呢? 可通过度量一组要素的分布来计算各类用于表现分布特...

LuckyDucky的博客 1万+
上一篇: C++ Primer 笔记
ChaChami
博客等级 码龄14年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值