文档介绍:面向对象与可视化程序设计 --Visual C++ 编程主讲教师:唐龙教授(计算机科学与技术系)黄维通博士(计算机与信息管理中心)清华大学2001年2月
1
第六章Windows应用程序中的键盘与鼠标
2
内容提要
在应用程序中键盘的应用
键盘操作应用举例
在应用程序中鼠标的应用
鼠标操作应用举例
3
§. 在应用程序中键盘的应用
4
扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备无关的虚拟码,虚拟码是由Windows系统定义的与设备无关的键的标识
由于键盘的输入
产生一条消息
扫描码、虚拟码以及其他与击键有关的消息
设备驱动程序
截取键的扫描码
翻译
虚拟码
它含
键盘上的键
对应
一个唯一的标识值(扫描码)
按下或释放某键时
产
生
取出键盘消息进行处理
消息
设备驱动程序
把消息放到系统的消息队列中
Windows从系统消息队列中取出消息
发送到相应的线程消息队列中
窗口过程
键盘在应用程序中的应用
5
虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,用以标识哪一个键被按下或释放,,
6
窗口正在接
收输入焦点
窗口函数通过捕获WM_SETFOCUS和WM_KILLFOCUS消息确定当前窗口是否具有输入焦点。
操作系统在接收到键盘输入后
把消息发送给有“输入焦点(input focus)的窗口
应用程序一般有几个窗
口,但当按下某一个键
时,只有一个窗口能接
收到该键盘消息,接收
这个键盘消息的窗口称
为有“输入焦点”的窗口
有“输入焦点”
的窗口应是活
动窗口或者活
动窗口的子窗口
窗口失去
输入焦点
7
键盘消息
按键消息
字符消息
键被按下或
松开时产生
按可显示的字符键时,
就产生字符消息。
系统按键消息
非系统按键消息
加Alt键组合的按键消息,
一般由Windows系统直接
处理,应用程序不处理
若应用程序处理了这
些系统键消息,还要调
用DefWindowsProc()函
数,以便不影响系统对
它们的处理
不使用Alt键组合
的按键消息
8
按键消息的两个变量
wParam
lParam
32bit(位)的变量
各bit有其含义
重复计数位(0~15位)
OEM扫描码(16~23位)
扩展键标志(24位)
保留位(25~28位)
关联码(29位)
键的先前状态(位30)
转换状态(31位)
包含了识别按下
的键的虚键码
9
在WinMain函数的消息循环中包含了TranslateMessage函数,其功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ASCII码后才能产生WM_CHAR消息
字符消息
系统
非系统
WM_KEYDOWN和WM_KEYUP
的按键消息只能产生非系统消息
WM_SYSKEYDOWN和WM_SYSKEYUP
按键消息只能产生系统消息
10