windows程序设计_第6章_键盘——学习笔记
来源:互联网 发布:杭创软件 编辑:程序博客网 时间:2024/06/02 20:00
Windows程序设计第6章 键盘
一、键盘基础
1、 忽略键盘
键盘是WINDOWS程序中经常用到的用户输入的主要来源,但是程序没有必要去处理所接收到的每一个键盘消息。在默认情况下,一些系统功能的击键操作会被交付给DefWindowProc函数处理。
2、 焦点
有输入焦点的窗口:接收到键盘事件的窗口。
活动窗口:总是最上层的窗口,他的父窗口句柄是NULL。窗口过程通过捕获WM_SETFOCUS\WM_KILLFOCUS消息来确定自己的窗口是否具有输入焦点。
3、 队列和同步
1) 应用程序消息队列
2) 系统消息队列
3) 二步处理法:先把消息存储在系统消息队列,再把它们发送到应用程序消息队列,原因是需要同步。
4、 击键和字符
1) 键盘事件的消息:击键和字符
2) 按下一个键一个消息,释放一个键又是一个消息
二、击键消息
1、 系统击键和非系统击键
键按下
键释放
非系统击键
WM_KEYDOWN
WM_KEYUP
系统击键
WM_SYSKEYDOWN
WM_SYSKEYUP
几乎所有影响程序窗口的消息都将先经过窗口过程。仅当应用程序传递消息给DefWindowProc函数时,Windows才会处理这些消息。
以上四类击键操作,wParam是虚拟键代码,用于标识哪个键被按下或被释放,而lParam包含属于本次击键的一些其他数据。
2、 虚拟键代码
大多数的虚拟键代码以VK_开头,可查表。
3、 lParam信息
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
扩展键标记
8位OEM扫描码
键的先前状态
内容代码
转换状态
16位重复计数
4、 转义状态
1) 通过调用GetKeyState函数获取是否有转义键(shift,ctrl,alt)被按下。
该函数的用法:并不实时检查键盘状态,它反映了到目前为止的键盘状态,并包含了正在被处理的键盘消息。它无法让你获得独立于标准键盘消息的键盘信息。
2) GetKeyState和GetAsyncKeyState的区别
GetAsyncKeyState:在按下某个键的同时被调用,判断正在按下某键
GetKeyState:在按过某键之后再调用,它返回最近的键盘消息从线程的队列中移出时的键盘状态,判断刚按过了某键。
三、字符消息
1、 四类字符消息
字符
死字符
消息来源
非系统字符
WM_CHAR
WM_DEADCHAR
WM_KEYDOWN
系统字符
WM_SYSCHAR
WM_SYSDEADCHAR
WM_SYSKEYDOWN
大多数情况下,windows程序会忽略其他三种字符消息,仅处理WM_CHAR消息。
2、 消息排序
1)输入顺序:按下SHIFT,按下A键,释放A键,再释放SHIFT键。
消息
击键或代码
WM_KEYDOWN
虚拟键代码VK_SHIFT(0X10)
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“A”的字符编码(0X41)
WM_KEYUP
“A”的虚拟键代码(0X41)
WM_KEYUP
虚拟键代码VK_SHIFT(0X10)
2)输入顺序:持续按住A键,然后释放
消息
击键或代码
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“a”的字符编码(0X61)
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“a”的字符编码(0X61)
WM_KEYDOWN
“A”的虚拟键代码(0X41)
WM_CHAR
“a”的字符编码(0X61)
WM_KEYUP
“A”的虚拟键代码(0X41)
3、 控制字符的处理
1) 基本规则:如果需要读取输入到窗口中的键盘字符,就处理WM_CHAR消息,如果需要读取光标键、功能键、DELETE键、INSERT键、SHIFT键、CTRL键、ALT键,则处理WM_KEYDOWN消息。另外TAB键、回车键、ESC键、空格键可以看作控制字符,而不是虚拟键。
四、插入符号(不是光标)
1、 插入符号:指示输入的下一个字符将出现在屏幕上的位置。
光标:表示鼠标位置的位图图像,即鼠标指针。
2、 基本插入符号函数
函数
功能
CreateCaret
创建和窗口关联的插入符号
SetCaretPos
设置窗口内的插入符号位置
ShowCaret
显示插入符号
HideCaret
隐藏插入符号
DestroyCaret
销毁插入符号
GetCaretPos
获得当前插入符号位置
GetCaretBlinkTime
获得插入符号闪烁时间
SetCaretBlinkTime
设置插入符号闪烁时间
3、 插入符号的使用规则
在窗口过程处理WM_SETFOCUS消息时调用CreateCaret函数,处理WM_KILLFOCUS消息时调用DestroyCaret 函数。
- windows程序设计_第6章_键盘——学习笔记
- windows程序设计_第5章_绘图基础——学习笔记
- Windows程序设计_Chap01_起步_学习笔记
- Windows程序设计_笔记01
- Windows程序设计_Chap03_窗口与消息_学习笔记
- Windows程序设计_Chap03_窗口与消息_学习笔记
- 程序设计与C语言学习笔记_第三章第4章 语句及控制结构
- 第一天学习_笔记
- Windows程序设计_学习总结(1)
- 《Windows程序设计》第5章学习笔记
- TCP-IP学习笔记_卷1_第12章_多播和广播
- Head First_设计模式_学习笔记_第01章_策略模式
- 《统计学习方法》李航_学习笔记_第2章_感知机
- 程序设计与C语言学习笔记_第六章数组
- 程序设计与C语言学习笔记_第七章指针
- windows程序设计学习笔记-键盘,鼠标,计时器
- 程序设计入门—Java语言_第一周编程作业
- 程序设计入门—Java语言_第四周编程作业
- MySQL基础语法
- 一个简单的内核线程
- Linux C++备忘录
- @RequestMapping注解的简单学习 和 @requestParam @PathVariable
- 魔幻计时器
- windows程序设计_第6章_键盘——学习笔记
- 数据仓库基本概念-事实表的三种分类
- This function has none of DETERMINISTIC, NO SQL解决办法
- Xcode调试技巧
- ASP.NET中获取URL重写前的原始地址详解
- 将拥有相同字段的数据项合并
- jsonArray 和 JavaBean互换
- 算法总结:判断一个数是否为素数
- 遥控器待机键的添加