嵌入式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语言修炼之道.屏幕操作篇

汉字处理   现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能。例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功能;一个提...

嵌入式C语言专题三:屏幕操作篇

屏幕乃嵌入式系统生存之重要辅助,面目可憎之显示将另用户逃之夭夭。屏幕编程若处理不好,将是软件中最不系统、最混乱的部分,笔者曾深受其害。   内容要点: ·汉字处理 ·系统时间显示 ·动...

嵌入式C语言专题四:键盘操作篇

计算机学的许多知识都具有相通性,因而,不断追赶时髦技术而忽略基本功的做法是徒劳无意的。我们最多需要"精通 "三种语言,最佳拍档是汇编、C、C++(或JAVA),很显然,如果你"精通"了这三种语言,其它...

嵌入式C语言修炼之道.内存操作篇

数据指针   在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语...

嵌入式C语言专题二:内存操作篇

C语言最精华的内涵皆在内存操作中体现。我们之所以在嵌入式系统中使用C语言进行程序设计,99%是因为其强大的内存操作能力!   如果你爱编程,请你爱C语言; 如果你爱C语言,请你爱指针; 如果...

C语言嵌入式系统编程修炼之屏幕操作

C语言嵌入式系统编程修炼之屏幕操作 作者:宋宝华出处:天极网责任编辑: 方舟 [ 2005-06-20 15:54 ] 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只...

嵌入式专题C语言篇

不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,由于汇编语言开发的复杂性,它并不是嵌入式系统开发的一般...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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