第六章 键盘part2

来源:互联网 发布:营销分析报告数据图表 编辑:程序博客网 时间:2024/05/16 17:16

6.3字符消息

四类字符消息:

非系统字符WM_CHAR和WM_DEADCHAR消息是从WM_KEYDOWN得到的;而系统字符WM_SYSCHAR和WM_SYSDEADCHAR消息是从WM_SYSKEYDOWN消息得到的。在大多数情况下,Windows程序会忽略除WM_CHAR之外的任何消息。伴随四个字符消息的lParam参数与产生字符代码消息的按键消息之lParam参数相同。如果您的窗口消息处理程序需要晓得目前窗口是否处理Unicode消息,则它可以呼叫:fUnicode = IsWindowUnicode(hwnd);

消息顺序:

TranslateMessage函数从WM_KEYDOWN和WM_SYSKEYDOWN消息产生了字符消息,所以字符消息是夹在按键消息之间传递给窗口消息处理程序的。

1.按下A键的消息顺序:WM_KEYDOWN -- WM_CHAR --WM_KEYUP

2.按下Shift键,再按下A键,然后释放A键,再释放Shift键:WM_KEYDOWN -- WM_KEYDOWN -- WM_CHAR -- WM_KEYUP -- WM_KEYUP (Shift键本身不产生字符消息)

3.自动重复按住A键:WM_KEYDOWN -- WM_CHAR -- WM_KEYDOWN -- WM_CHAR -- WM_KEYDOWN -- WM_CHAR  -- WM_KEYUP

处理控制字符:

如果需要读取输入到窗口的键盘字符,那么可以处理WM_CHAR消息。如果需要读取光标键、功能键、Delete、Insert、Shift、Ctrl以及Alt键,那么您可以处理WM_KEYDOWN消息。Tab、Enter、Backspace和Escape键处理成控制字符而不是虚拟键。

死字符消息:

Windows程序经常忽略WM_DEADCHAR和WM_SYSDEADCHAR消息

在某些非U.S.英语键盘上,有些键用于给字母加上音调。因为它们本身不产生字符,所以称之为「死键」。当使用者按下这个死键时,窗口消息处理程序接收到一个wParam等于音调本身的ASCII或者Unicode代码的WM_DEADCHAR消息。

 

6.4键盘消息和字符集

KeyView1:

字符集和字体
用于在屏幕上显示字符的字体和键盘接收的字符代码不一致。Windows支持三类字体-点阵字体、向量字体和(从Windows 3.1开始的)TrueType字体。在内定的设备内容下获得的点阵字体称为系统字体。您可通过呼叫带有SYSTEM_FONT标识符的GetStockObject函数来获得字体句柄。

StokFont:

TrueType和大字体:
点阵字体(在日文版Windows中带有附加字体)最多包括256个字符。

 

 

6.5插入符号(不是光标)

插入符号函数:

CreateCaret  建立与窗口有关的插入符号
SetCaretPos  在窗口中设定插入符号的位置
ShowCaret  显示插入符号
HideCaret  隐藏插入符号
DestroyCaret  撤消插入符号

另外还有取得插入符号目前位置(GetCaretPos)和取得以及设定插入符号闪烁时间(GetCaretBlinkTime和SetCaretBlinkTime)的函数。

一个消息队列只能支持一个插入符号。因此,如果您的程序有多个窗口,那么各个窗口必须有效地共享相同的插入符号。

通过处理WM_SETFOCUS和WM_KILLFOCUS消息,程序就可以确定它是否有输入焦点。

使用插入符号的主要规则很简单: 窗口消息处理程序在WM_SETFOCUS消息处理期间呼叫CreateCaret,在WM_KILLFOCUS消息处理期间呼叫DestroyCaret。
插入符号刚建立时是隐蔽的。如果想使插入符号可见,那么您在呼叫CreateCaret之后,窗口消息处理程序还必须呼叫ShowCaret。

TYPER程序: