- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 语言编程修 炼之五键盘操作
C 语言嵌入式系统编程修炼之五:键盘操作 处理功能键 功能键的问题在于,用户界面并非固定的,用户功能键的选择将使屏幕画面处于不同的显示状态下。例如,主画面如图1: 图1 主画面 当用户在设置XX 上按下Enter 键之后,画面就切换到了设置XX 的界面,如图2: 图2 切换到设置XX 画面 程序如何判断用户处于哪一画面,并在该画面的程序状态下调用对应的功能键处理函数,而且保证良好的结构,是一个值得思考的问题。 让我们来看看WIN32 编程中用到的窗口概念,当消息(message)被发送给不同窗口的时候,该窗口的消息处理函数。 (是一个callback 函数)最终被调用,而在该窗口的消息处理函数中,又根据消息的类型调用了该窗口中的对应处理函数。通过这种方式,WIN32 有效的组织了不同的窗口,并处理不同窗口情况下的消息。 我们从中学习到的就是: (1)将不同的画面类比为WIN32 中不同的窗口,将窗口中的各种元素(菜单、按钮等)包含在窗口之中; (2)给各个画面提供一个功能键消息处理函数,该函数接收按键信息为参数; (3)在各画面的功能键消息处理函数中,判断按键类型和当前焦点元素,并调用对应元素的按键处理函数。 struct windows /* 将窗口元素、消息处理函数封装在窗口中 */ { BYTE currentFocus; ELEMENT element[ELEMENT_NUM]; void (*messageFunction) (BYTE keyValue); … }; void messageFunction(BYTE keyValue) /* 消息处理函数 */ { BYTE i = 0; while ( (element [i].ID!= currentFocus) (i ELEMENT_NUM) )/* 获得焦点元素 */ { i++; } if(i ELEMENT_NUM) /* 消息映射 */ { switch(keyValue) { case OK: element[i].OnOk(); break; … } } } 在窗口的消息处理函数中调用相应元素按键函数的过程类似于消息映射,这是我们从WIN32 编程中学习到的。编程到了一个境界,很多东西都是相通的了。其它地方的思想可以拿过来为我所用,是为编程中的拿来主义。 处理数字键 用户输入数字时是一位一位输入的,每一位的输入都对应着屏幕上的一个显示位置(x 坐标,y 坐标)。此外,程序还需要记录该位置输入的值,所以有效组织用户数字输入的最佳方式是定义一个结构体,将坐标和数值捆绑在一起: typedef struct tagInputNum /* 用户数字输入结构体 */ { BYTE byNum; /* 接收用户输入赋值 */ BYTE xPos; /* 数字输入在屏幕上的显示位置x 坐标 */ BYTE yPos; /* 数字输入在屏幕上的显示位置y 坐标 */ }InputNum, *LPInputNum; 那么接收用户输入就可以定义一个结构体数组,用数组中的各位组成一个完整的数字: InputNum inputElement[NUM_LENGTH]; /* 接收用户数字输入的数组 */ extern void onNumKey(BYTE num) /* 数字按键处理函数 */ { if(num==0|| num==1) /* 只接收二进制输入 */ { DrawText(inputElement[currentElementInputPlace].xPos, inputElement[currentElementInputPlace].yPos, %1d, num); /*在屏幕上显示用户输入 */ inputElement[currentElementInputPlace].byNum = num; /* 将输入赋值给数组元素 */ moveToRight(); /* 焦点及光标右移 */ } } 将数字每一位输入的坐标和输入值捆绑后,在数字键处理函数中就可以较有结构的组织程序,使程序显得很紧凑。 整理用户输入 继续第2 节的例子,在第2 节的onNumKey 函数中,只是获取了数字的每一位,因而我们需要将其转化为有效数据,譬如要转化为有效的XXX数据,其方法是: void convertToXXX() /* 从2 进制数据位转化为有效数据:XXX */
您可能关注的文档
最近下载
- 浅表淋巴结结核的诊断与治疗专家共识.pptx VIP
- 标准图集-11K406-暖,冷风机选用与安装.pdf VIP
- 患者隐私保护培训课件(精).pptx VIP
- 2024年烟草公司笔试试题真题(附答案).docx VIP
- 实景三维地理信息数据倾斜摄影测量技术规程.pdf VIP
- 化学-郑州外国语中学2024-2025学年高一上学期10月月考.pdf VIP
- 中职思想政治高教版(2023)哲学与人生 第三课 追求人生理想 教案(表格式).doc.docx VIP
- 七夕情人节牛郎织女小报手抄报word电子模板黑白线稿横版竖版涂色 (1).docx VIP
- 歌曲二胡曲谱.doc VIP
- 财务会计学习指导、习题与实训第六版王宗江习题答案.docx
文档评论(0)