面向对象的界面编程-嵌入式微系统连载之九

msOS采用128*64的字库黑白屏,降低硬件设计复杂度,这个屏一行可以显示8个汉字或者16个字母,总共4行。界面开发基于面向对象方式,把界面抽象为几个页面,而页面又由控件组成,以我做的高频机为例,抽象了5个页面,每个页面上都由背景文字、标签和文本组成。

 


上图为工作页面,由一张背景文字(BackText),两个文本(TextBox)和五个标签(Label)组成。背景文字用于显示固定的说明文字,比如频率、功率等,这些文字在这个页面下是固定不能变化的。标签控件用于显示变量值,可以是字符串也可以是数字。文本控件具有标签的功能外,还可以通过按键等修改变量值。以上三种控件构成了最常用的页面。
接触过PC机编程的,对于控件概念是非常容易接受的,若没有接触过,可以通过msOS配套的硬件开发平台msPLC Demo了解界面编程,这样会相对容易很多,此外也可以接触一下C#编程,从跟msOS配套的msMenu源码入手,这个msMenu源码比较简单,在PC机上用C#虚拟了128*64的黑白字库屏。有了msMenu,各类STM32F103的开发板都可以运行msOS,通过串口跟PC机通讯,在msMenu上显示,不需要硬件LCD屏,方便大家学习。msMenu的两个主显示区,就是由两个大的TextBox组成。

 

下图为msMenu

 


   
界面编程基于面向对象设计,首先要建立页面及各个控件的对象类型。下图为页面的对象类型。

 

 

BackTextPointer:背景文字控件加载点,是一个16*4字节的数组,作为页面背景。
ChartPointer:图表控件加载点,高频机项目中用到,是一个特殊控件,一般项目用不到。
LabelPointer:标签控件加载点,一个Form可以支持多个Label,需要支持多控件级联。
TextBoxPointer:文本控件加载点,一个Form可以支持多个TextBox,需要支持多控件级联。
FocusTextBoxDataPointer:文本控件操作选择,设定焦点用于选择那个文本控件用于输入。

 

                    

                             
设计程序的时候,第一步要建立页面Form,如下图:                                           

                                       

第二步,定义各种控件和资源。

 

                                                      
第三步,各个页面加载控件,初始化控件参数,关联业务逻辑数据库中的数据。
                      

 

 

第四步,执行MenuTask解析当前页面

 

                                    
msOS采用的菜单界面,非常简单,是一个架构性的菜单界面,很适合用户看懂之后,自己修改、增删,也可以应用于彩屏。菜单界面的细节部分,请参考源码。