- 1、本文档共36页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC_面向对象与可视化程序设计 第五讲 Windows应用程 ....ppt
第6章 Windows应用程序中的键盘与鼠标 Huang Weitong * * 第5讲 Windows应用程序中的键盘与鼠标 扫描码是依赖于具体设备的,为达到设备无关性的要求,往往使用与具体设备无关的虚拟码,虚拟码是由Windows系统定义的与设备无关的键的标识 由于键盘的输入 产生一条消息 扫描码、虚拟码以及其他与击键有关的消息 设备驱动程序 截取键的扫描码 翻译 虚拟码 它含 键盘上的键 对应 一个唯一的标识值(扫描码) 按下或释放某键时 产 生 取出键盘消息进行处理 消息 设备驱动程序 把消息放到系统的消息队列中 Windows从系统消息队列中取出消息 发送到相应的线程消息队列中 窗口过程 6.1 键盘在应用程序中的应用 虚拟码是一种与设备无关的键盘编码,它的值存放在键盘消息的wParam参数中,用以标识哪一个键被按下或释放,最常用的虚拟码已经在Windows.h中定义, 操作系统在接收到键盘输入后 把消息发送给具有“输入焦点(input focus)的窗口 应用程序一般有几个窗 口,但当按下某一个键 时,只有一个窗口能接 收到该键盘消息,接收 这个键盘消息的窗口称 为有“输入焦点”的窗口 有“输入焦点” 的窗口应是活 动窗口或者活 动窗口的子窗口 窗口正在接 收输入焦点 窗口函数通过捕获WM_SETFOCUS和WM_KILLFOCUS消息确定当前窗口是否具有输入焦点。 窗口失去 输入焦点 键盘消息 按键消息 字符消息 按下或松开一个键时 就产生了一按键消息 一个按键的组合产生了 一个可以显示的字符时, 就产生了一个字符消息 系统按键消息 非系统按键消息 Alt键与相关输入键的组合 产生的消息,这些键一般 由Windows系统内部直接 处理,应用程序不处理 若应用程序处理了这 些系统键消息,还要调 用DefWindowsProc()函 数,以便不影响系统对 它们的处理 不使用Alt键组合 的的按键消息 按键消息的两个变量 wParam lParam 32位的变量 重复计数位(0~15位) OEM扫描码(16~23位) 扩展键标志(24位) 保留位(25~28位) 关联码(29位) 键的先前状态(位30) 转换状态(31位) 包含了识别按下 的键的虚键码 在WinMain函数的消息循环中包含了TranslateMessage函数,其功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ASCII码后才能产生WM_CHAR消息 字符消息 系统 非系统 WM_KEYDOWN和WM_KEYUP 的按键消息只能产生非系统消息 WM_SYSKEYDOWN和WM_SYSKEYUP 按键消息只能产生系统消息 【6-1】 设计一个窗口,在该窗口中练习键盘的响应,要求如下: (1)??? 单击键盘上的向上箭头时,窗口中显示“You had hitted the up key” (2)??? 单击Shift键时,窗口中显示“You had hitted the SHIFT key” (3)??? 单击Ctrl键时,窗口中显示“You had hitted the CTRL key” (4)??? 单击Ctrl+A键时,窗口中显示“You had hitted the CTRL A key” (5)??? 单击Shift+B键时,窗口中显示“You had hitted the SHIFT B key” long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) {HDC hDC; //定义设备环境句柄. PAINTSTRUCT ps; //定义包含绘图信息的结构体变量 HPEN hPen; //定义画笔句柄。 HBRUSH hBrush; //定义画刷句柄 //以下定义输出的字符串。 static char cUp[]=You had hitted the UP key; static char cCtrl[]=You had hitted the Ctrl key; static char cShift[]=You had hitted the SHIFT key; static char cCtrl_A[]=You had hitted the CTRL A key; static char cShift_B[]=You had hitted the SHIFT B key; //下面定义并初始化按键标志变量。 static BOOL nUpKeyDown=FALSE, nShiftKeyDown=FALSE, nCtrlKeyDown
文档评论(0)