C语言对象化设计的实例——LCD菜单
来源:互联网 发布:阿里云 内网穿透 编辑:程序博客网 时间:2024/05/28 09:32
这是我十三年前读研究生的时候写的系列文章《C语言嵌入式系统编程修炼》系列文章中的一小节,是一个用面向对象,把LCD上面菜单,对象化的例子。该文章原始出处:
http://soft.yesky.com/lesson/188/2023188.shtml
菜单操作
无数人为之绞尽脑汁的问题终于出现了,在这一节里,我们将看到,在C语言中哪怕用到一丁点的面向对象思想,软件结构将会有何等的改观!
笔者曾经是个笨蛋,被菜单搞晕了,给出这样的一个系统:
图1 菜单范例
要求以键盘上的"← →"键切换菜单焦点,当用户在焦点处于某菜单时,若敲击键盘上的OK、CANCEL键则调用该焦点菜单对应之处理函数。我曾经傻傻地这样做着:
void onOkKey()
{
/* 判断在什么焦点菜单上按下Ok键,调用相应处理函数 */
Switch(currentFocus)
{
case MENU1:
menu1OnOk();
break;
case MENU2:
menu2OnOk();
break;
…
}
}
/* 按下Cancel键 */
void onCancelKey()
{
/* 判断在什么焦点菜单上按下Cancel键,调用相应处理函数 */
Switch(currentFocus)
{
case MENU1:
menu1OnCancel();
break;
case MENU2:
menu2OnCancel();
break;
…
}
}
终于有一天,我这样做了:
typedef struct tagSysMenu
{
char *text; /* 菜单的文本 */
BYTE xPos; /* 菜单在LCD上的x坐标 */
BYTE yPos; /* 菜单在LCD上的y坐标 */
void (*onOkFun)(); /* 在该菜单上按下ok键的处理函数指针 */
void (*onCancelFun)(); /* 在该菜单上按下cancel键的处理函数指针 */
}SysMenu, *LPSysMenu;
当我定义菜单时,只需要这样:
{
{
"menu1", 0, 48, menu1OnOk, menu1OnCancel
}
,
{
" menu2", 7, 48, menu2OnOk, menu2OnCancel
}
,
{
" menu3", 7, 48, menu3OnOk, menu3OnCancel
}
,
{
" menu4", 7, 48, menu4OnOk, menu4OnCancel
}
…
};
OK键和CANCEL键的处理变成:
void onOkKey()
{
menu[currentFocusMenu].onOkFun();
}
/* 按下Cancel键 */
void onCancelKey()
{
menu[currentFocusMenu].onCancelFun();
}
程序被大大简化了,也开始具有很好的可扩展性!我们仅仅利用了面向对象中的封装思想,就让程序结构清晰,其结果是几乎可以在无需修改程序的情况下在系统中添加更多的菜单,而系统的按键处理函数保持不变。
面向对象,真神了!
点击阅读原文,进入《C语言嵌入式系统编程修炼》系列
阅读全文
0 0
- C语言对象化设计的实例——LCD菜单
- C语言对象化设计的实例——LCD菜单
- 邵国际: C 语言对象化设计实例 —— 命令解析器
- 设计模式——C语言的面向对象
- 基于状态机的LCD多级菜单设计
- 基于状态机的LCD多级菜单设计
- 简单代码实现LCD菜单(C语言的实现方法---加强版 有视频教程)
- 单片机c语言下lcd多级菜单的一种实现方法
- 单片机c语言下lcd多级菜单的一种实现方法
- 单片机C语言下LCD多级菜单的一种实现方法
- c语言--菜单设计程序
- C语言实现的LCD数学
- C语言的面向对象设计 —— 对 X264/FFMPEG 架构探讨——胜读十年书
- C语言的面向对象设计 —— 对 X264/FFMPEG 架构探讨
- ARM9(S3C2440)的LCD显示——程序实例讲解
- C语言的设计模式-面向对象机制的实现
- C语言面向对象编程——读书《C嵌入式设计模式》
- C语言的模块化设计和面向对象编程
- Spring Cloud构建微服务架构Hystrix监控面板
- Spring框架中的Ioc
- 网易2017春招编程题:调整队形 [python]
- Java 9 中的 GC 调优基础
- HashMap底层详解-001-数据结构、put、get
- C语言对象化设计的实例——LCD菜单
- php中time()与$_SERVER[REQUEST_TIME]用法区别
- 前后端分离后的前端时代
- 《C语言的面向对象(面向较大型软件)》ppt分享和ppt注解
- 逐浪字库打造最全的书法字体,最全的合集(字体书法欣赏下载)
- mysql数据误删除的恢复
- Windows定时任务备份文件夹
- HashMap底层详解-002-hash算法、长度的秘密
- 倒计时:11.16今晚8点CSDN直播《C语言大型软件设计的面向对象》