嵌入式C语言之屏幕操作之菜单篇

原创 2007年09月13日 13:41:00

在c语言中使用面向对象的思想 ,软件结构会有何等改观呢?

菜单一   菜单二   菜单三   菜单四  菜单..

要求以键盘上的左右箭头键切换菜单焦点,当用户在焦点处于某菜单时,若敲击键盘上的OK,CANCEL键则调用该焦点菜单对应的处理函数。看如下两种实现方法的区别:

 

/*按下OK键*/
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;

当我们定义菜单时只需这样:

 

static SysMenu menu[MENU_NUM]=
{
       
{
            
"menu1",0,48,menu1OnOk,menu1OnCancel
       }

       ,
       
{
            
"menu2",7,48,menu2OnOk,menu2OnCancel 
       }
 
       ,
       
{
            
"menu3",14,48,menu2OnOk,menu2OnCancel 
       }
 
       ,
       ...
}
;

Ok键和Cancel键的处理变成:

 

/*按下OK键*/
void onOkKey()
{
     menu[currentFocusMenu].onOkFun();
}

/*按下Cancel键*/
void onCancelKey()
{
      menu[currentFoucusMenu].onCancelFunI();
}

 

程序别大大的花间了,也看是具有很好的可扩展性!我们仅仅用了面向对象中的封装思想,就让程序结构清晰,其结果是几乎可以在无需修改程序的情况下在系统中添加更多的菜单,而系统的按键处理函数保持不变。

 

C语言写的菜单"类"

/************************************名 称:菜单类 CMenu作 者:freewind版 本:v1.0时 间:2006-08Email:freewind22@16...
  • Free_Wind22
  • Free_Wind22
  • 2007年05月22日 13:40
  • 1363

自动化测试程序之二模拟触摸屏点击事件和滑动事件(C语言)

一、测试程序编写说明 终端设备上运行的是LINUX+QT应用程序,使用触摸屏进行人机交互。经过测试人员长时间的人机交互测试,来确认系统的功能是否满足需求后。现在需要编写一个自动化的测试程序模拟触摸...
  • flyeagle022
  • flyeagle022
  • 2015年06月12日 16:15
  • 3666

C语言控制台菜单

  • 2014年04月07日 14:25
  • 1KB
  • 下载

C语言操作界面菜单思考

C语言中,制作菜单操作界面是很常见的,一般都是通过scanf("%d",&i) 与switch(i)搭配来使用,这种方法很基础,我近来发现另外一种比较不错的方法,容错处理也有,可拓展性也高:#defi...
  • huasir_hit
  • huasir_hit
  • 2017年06月25日 23:51
  • 1068

嵌入式c语言高级编程技巧 之 结构体的对象思维。

基于对象思想的结构体运用对于c语言来说好像没有对象这个概率,但是结构体的出现可以完全模拟对象情况举个简单的例子,就好像c++教程里关于求矩形的面积的问题,先定义一个对象类。class 矩形 { ...
  • sinat_23338865
  • sinat_23338865
  • 2017年11月12日 15:24
  • 108

嵌入式C语言之屏幕操作

 系统时间显示:         在时间显示函数中以静态变量分别存储小时,分钟,秒只有在其变化的时候才进行更新显示。代码如下:          extern void DisplayTime(......
  • chenyt2007
  • chenyt2007
  • 2007年09月13日 10:57
  • 755

用C语言实现简单菜单

通过本实例简单了解C语言实现菜单的基本原理。实例中没有什么过多深入的东西,仅仅是简单实现基本的菜单。 本实例是查询航班时刻表: /***********************************...
  • elifefly
  • elifefly
  • 2008年06月28日 18:16
  • 2078

Menu的使用

public class MenuActivity extends Activity {  private static final int ITEM0 = Menu.FIRST;  privat...
  • u010324384
  • u010324384
  • 2013年06月16日 14:03
  • 340

嵌入式C语言之屏幕操作之 模拟MessageBox函数

 嵌入式系统中没有给我们提供MessageBox,但是鉴于其功能强大,我们需要模拟之,一个模拟MessageBox函数为: /**//*********************************...
  • chenyt2007
  • chenyt2007
  • 2007年09月13日 14:46
  • 978

"C语言之美" -- 变量名

C语言是一种优美的语言。如果你不能体会到这种语言的魅力,那么你将无法真正爱上这门语言。 C语言是一种面向过程的语言,这也就决定它的优点和不可避免的缺点。在嵌入式领域中,是把C语言作为开发语言。这是为什...
  • zhengqijun_
  • zhengqijun_
  • 2016年08月11日 15:53
  • 314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式C语言之屏幕操作之菜单篇
举报原因:
原因补充:

(最多只允许输入30个字)