键盘事件汇总

第四讲:键盘事件【事件驱动】所谓的事件驱动其实就是当满足什么样的条件下发生另外一件事情。比如当你按下按钮时就会执行相应的代码一样。由于控制台程序在同一个时刻只能够执行一个任务,这就造成了在处理事件的效率上太过于低下,通常现代的程序都是面向多任务的,也就是说同一个时间段可以完成好几个功能,那么如何才能够做到这一点呢?就依赖于事件驱动机制。理解事件驱动就必须要先理解事件,所谓的事件(Event)其实就是触发某样事情发生的条件,例如键盘按下、单击按钮、双击图标等等。这些称之为事件。而当这些事件发生之后,就会触发另外一件事情。例如当我们点击“百度搜索”按钮时就会跳转到搜索的结果界面一样。当然,采用事件驱动的直接原因就是最大化利用CPU,由于控制台程序的限制,我们不能够完成多任务的操作(早期的DOS操作系统是单用户单任务的,即同一个时刻只能够完成一个任务,效率很慢)故此我们需要事件驱动这样的机制为我们提高效率,为我们最大化利用CPU资源。简而言之,事件驱动就是一个用于提高程序效率的机制。如果上述还没有让你明白过来,你可以看看百度百科上的解释,如下:所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作.事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、来自硬件的(如时钟事件等)和来自软件的(如操作系统、应用程序本身等)。事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,它往往要到实现阶段才完全确定,因而需要运用虚函数机制(函数名往往取为类似于HandleMsg的一个名字)。对于框架的使用者来说,他们唯一能够看到的是事件处理器。这也是他们所关心的内容。【程序查询方式】通常检测事件有两种方法,一种称为程序查询法,一种称之为程序中断法。由于在控制台中我们无法直接使用系统中断(系统中断只有汇编语言可以直接使用),因此我们无法在高级语言中使用程序中断法检测指令。故此只能够使用程序查询方式进行事件的检测。所谓的程序查询方式实际上是利用一个死循环不停地对事件进行查询,如果事件发生则执行相应的代码,当代码执行结束之后继续开始下一轮的查询,由于CPU的计算速度相当快,你不用担心会有延时的问题。这样一轮一轮查询---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---的方式,我们称之为程序查询方式,也叫轮询法。程序查询法的流程图如下:【键盘按下事件】所谓的键盘事件,是指无论在何时只要键盘按键被按下,即可被程序所截获,并执行相应的功能代码。故此负责监听键盘事件的API函数会一直处于工作状态,在MFC中我们可以通过死循环进行操作,当然也可以通过我们即将接触到的多线程编程进行操作。在这里我们介绍如何利用死循环监听键盘。【DWORD类型】在MFC中,通常会见到DWORD类型,所谓的DWORD类型就是DoubleWord类型,即双字节类型,MFC中将unsignedlong类型使用typedef关键字重新制定为DWROD类型。MFC框架中的声明如下:typedefunsignedlongDWORD;故此,DWROD类型的本质其实是一个无符号的长整型数。在MFC中我们可以使用DWORD类型表示任何双字节的数据。这里笔者将不再重复如何使用DWORD类型的变量的方法。【INPUT_RECORD结构体】INPUT_RECORD结构体是用于描述输入设备事件的结构体,声明如下:typedefstruct_INPUT_RECORD{WORDEventType;//事件类型union{KEY_EVENT_RECORDKeyEvent;//键盘事件MOUSE_EVENT_RECORDMouseEvent;//鼠标事件---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---WINDOW_BUFFER_SIZE_RECORDWindowBufferSizeEvent;//窗口缓冲事件MENU_EVENT_RECORDMenuEvent;//菜单事件FOCUS_EVENT_RECORDFocusEvent;//摄像头事件}Event;}INPUT_RECORD;当然上述的结构体不像一般的结构体,它有一些复杂,但是也不影响我们的使用,在此要多说一句的是...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?