windows程序设计_第6章_键盘——学习笔记
2013-07-25 16:51
344 查看
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 |
以上四类击键操作,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 |
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) |
消息 | 击键或代码 |
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 函数。
<
9910
/article>
相关文章推荐
- windows程序设计学习笔记-键盘,鼠标,计时器
- Windows程序设计学习笔记--第一个Windows程序以及宽字符集(了解)
- Windows 程序设计学习笔记(一)
- Windows程序设计学习笔记一:第一个窗口
- Windows 程序设计学习笔记1
- Windows程序设计学习笔记一——第一个windows窗口
- Windows程序设计 读书笔记 - 键盘。
- Java学习笔记-Java程序设计环境(Windows)
- windows程序设计学习笔记-多文档界面
- windows程序设计学习笔记-设备相关位图
- windows程序设计学习笔记-段落处理和GDI路径
- windows程序设计学习笔记-Unicode,绘图基础
- windows程序设计第一章学习笔记
- windows程序设计学习笔记-设备无关位图
- Windows学习笔记12——键盘相关<一>
- windows程序设计学习笔记1--新建程序骤
- windows程序设计第二章学习笔记
- Windows学习笔记13——键盘相关<二>
- windows程序设计学习笔记--多任务和多线程
- Windows程序设计_Chap03_窗口与消息_学习笔记