Visual c++ 99a BeAr 同时按下了Ctr1和P键 匚醍 图44程序运行结果 4.1.5字符消息的处理 当按下一个可显示的字符(数字、字母、标点等)的键时,除了产生按下键消息 WM KEYDOWN外,还将产生一个字符消息 WM CHAR。当然,如果释放该键,还将产生 WM KEYUP消息。用户敲击一个一个字符键后,其产生的消息及处理函数的执行顺序如图45所示。 用户敲击字符按键 键盘消息 WM_ KEY DOWN WM CHAR WM KEYUP 处理函数 OnKey Dowr0 On Char O OnKeyUpO 图45键盘消息的处理过程 MFC将 WM CHAR消息映射为 ON WM CHAR,其对应的处理函数为 On Char(。函数 On Char( 的定义如下: void (UINT nchar, UINT nRepcnt, UINT nFlags) 其中参数 nRep Cnt和 nFlags的含义与41.3节介绍的 OnKey Down函数的完全相同。而参数 n Char存 放的不再是按键的虚拟键码,而是 Windows字符集的字符代码,默认为ASCI码。键盘上常见的字符 及其ASCI码值如表4.3所示 表4.3常见的字符及其ASc码值 字符符号 ASC码值 字符符号 ASC码值 字符符号 AScl码值 35 励志照亮人生编程改变命运
图4.4 程序运行结果 4.1.5 字符消息的处理 当按下一个可显示的字符(数字、字母、标点等)的键时,除了产生按下键消息 WM_KEYDOWN外,还将产生一个字符消息WM_CHAR。当然,如果释放该键,还将产生 WM_KEYUP消息。用户敲击一个一个字符键后,其产生的消息及处理函数的执行顺序如图4.5所示。 图4.5 键盘消息的处理过程 MFC将WM_CHAR消息映射为ON_WM_CHAR,其对应的处理函数为OnChar()。函数OnChar() 的定义如下: void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 其中参数nRepCnt和nFlags的含义与4.1.3节介绍的OnKeyDown函数的完全相同。而参数nChar存 放的不再是按键的虚拟键码,而是Windows字符集的字符代码,默认为ASCII码。键盘上常见的字符 及其ASCII码值如表4.3所示。 表4.3 常见的字符及其ASCII码值 字符符号 ASCII码值 字符符号 ASCII码值 字符符号 ASCII码值 ! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * 42 + 43 , 44 - 45 . 46 / 47 76 励志照亮人生 编程改变命运 零基础学 Visual C++ E 用户敲击字符按键 处理函数 键盘消息
第5单基本输入一键盘和标 (续) 符符号 AScl码值 字符符号 ASC码值 符符号 ASC码值 0~9 48-57 65-90 97~122 126 如果 n char取值为64,则表示按键字符为“@”。下面给出一个在视图窗口中,显示键盘输入字符 的实例。 该实例实现的功能是在单文档应用程序界面中,当用户通过键盘键入字符时,在视图窗口依次显 示键入的字符。当用户按下【 Enter】键时,进行换行输出。具体实现过程如下。 1.使用 MFC AppWizard创建SD|工程 按照41.3节介绍的“Ch5Demo1”工程的创建过程,创建 MFC SDI工程“Ch5Demo3 2.添加 WM CHAR消息映射和响应函数 执行“view”→“ Class wizard”菜单命令,或者使用【Ctrl+W】快捷键,打开“MFC Class wizard”对话框。在“ Message Maps”选项卡的“ Class name”列表框中选择要响应键盘消息 的类“ CChsDemo3view”,在“ Object IDs”列表框中选择“ CChs Demo3view”,在“ Messages”列 表框中选择“ WM CHAR”字符按键消息 单击“ Add function”按钮, Class wizard自动为 WM CHAR添加了 ON WM CHAR消息映射宏 On Char(消息处理函数,如图46所示。 Message Maps Member Variables Automation ActiveX Events class Info Class name CCh5Demo3view D: \Ch5Demo3\Ch Demo 3View.h, D: Ch5Demo 3\Ch Delete Function WMCAPTURECHANGED Edit Code A CONTEXTMENU v WM_DROPFILES v OnBeginPrinting v OnPreparePrintir asses keyboard events to focus window 图46“ MFC Class Wizard”对话框 励志照亮人生编程改变命
(续) 字符符号 ASCII码值 字符符号 ASCII码值 字符符号 ASCII码值 0~9 48~57 : 58 ; 59 < 60 = 61 > 62 ? 63 @ 64 A~Z 65~90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a~z 97~122 { 123 | 124 } 125 ~ 126 如果nChar取值为64,则表示按键字符为“@”。下面给出一个在视图窗口中,显示键盘输入字符 的实例。 该实例实现的功能是在单文档应用程序界面中,当用户通过键盘键入字符时,在视图窗口依次显 示键入的字符。当用户按下【Enter】键时,进行换行输出。具体实现过程如下。 1. 使用MFC AppWizard创建SDI工程 按照4.1.3节介绍的“Ch5Demo1”工程的创建过程,创建MFC SDI工程“Ch5Demo3”。 2. 添加WM_CHAR消息映射和响应函数 执行“View”→“ClassWizard”菜单命令,或者使用【Ctrl+W】快捷键,打开“MFC ClassWizard”对话框。在“Message Maps”选项卡的“Class name”列表框中选择要响应键盘消息 的类“CCh5Demo3View”,在“Object IDs”列表框中选择“CCh5Demo3View”,在“Messages”列 表框中选择“WM_CHAR”字符按键消息。 单击“Add Function”按钮,ClassWizard自动为WM_CHAR添加了ON_ WM_CHAR消息映射宏 和OnChar()消息处理函数,如图4.6所示。 图4.6 “MFC ClassWizard”对话框 77 励志照亮人生 编程改变命运 第 5 章 基本输入—键盘和鼠标消息