C语言对象化设计的实例——LCD菜单
来源:互联网 发布:windows 7系统下载 编辑:程序博客网 时间:2024/05/07 12:53
这是我十三年前读研究生的时候写的系列文章《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语言的模块化设计和面向对象编程
- 举个卡戴珊的例子,讲讲Hinton的Capsule是怎么回事
- 一个入门的arttemplate模板
- unity GPU优化(Occlusion Culling遮挡剔除,LOD多细节层次,GI(Global Illumination)全局光照)
- Redis 客户端连接
- LeetCode-142. Linked List Cycle II
- C语言对象化设计的实例——LCD菜单
- Java对象的创建过程
- 基于Algolia的NoSQL技术实践及与逐浪CMS的集成分享
- iOS开发-GCD、NSThread、NSOperation的简单示例方法
- 初识OPENWRT:基本编译环境介绍
- java 集合类知识汇总
- 《C语言的面向对象(面向较大型软件)》ppt分享和ppt注解
- mac下安装nvm以及node、webpack
- Weblogic 12c中修改SERVER NAME的方法