![]() |
|
| | 网站首页 | 电子知识 | 单片机知识 | 电路设计 | 微电子技术 | SCADA系统 | 资源下载 | 给我留言 | 谷歌商城 | 视频教程 | ieee | |
| 热门搜索关键字: 单片机教程 | 三极管 | 二极管 | C语言 | 汇编语言 | SCADA | 元器件 | 模拟电子 | |
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() 图1 主画面 |
![]() 图2 切换到设置XX画面 |
| /* 将窗口元素、消息处理函数封装在窗口中 */ struct windows { BYTE currentFocus; ELEMENT element[ELEMENT_NUM]; void (*messageFun) (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编程中学习到的。编程到了一个境界,很多东西都是相通的了。其它地方的思想可以拿过来为我所用,是为编程中的"拿来主义"。
在这个例子中,如果我们还想玩得更大一点,我们可以借鉴MFC中处理MESSAGE_MAP的方法,我们也可以学习MFC定义几个精妙的宏来实现"消息映射"。
处理数字键
用户输入数字时是一位一位输入的,每一位的输入都对应着屏幕上的一个显示位置(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进制数据位转化为有效数据:XXX */ void convertToXXX() { BYTE i; XXX = 0; for (i = 0; i < NUM_LENGTH; i++) { XXX += inputElement[i].byNum*power(2, NUM_LENGTH - i - 1); } } |
| /* 从有效数据转化为2进制数据位:XXX */ void convertFromXXX() { BYTE i; XXX = 0; for (i = 0; i < NUM_LENGTH; i++) { inputElement[i].byNum = XXX / power(2, NUM_LENGTH - i - 1) % 2; } } |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站地图 | 名站导航 | 管理登录 | |
| 本站资源部分来自互联网,如侵犯您的权利,我们将予以删除 鲁ICP备08006092号 |
| 中国IEEE 中国电气电子工程师网 版权所有 |