软键盘产品界面显示的通用程序设计
Static int ShowStateList[22][11]数组的具体定义格式如下:
Y=0 | Y=1 | Y=2 | Y=3 | Y=4 | Y=11 | ||
ShowStateList[X][Y] | 状态1 | 状态2 | 状态3 | 状态4 | 状态5 | … | 状态11 |
ShowStateList[10][11] | 38 | 39 | 40 | 0 | NULL | … | NULL |
其中“状态1,2,3……”依次表示当前状态链的不同状态。“0”是结束标志,“NULL”表示没有数据。
在程序初始化的过程中,由这个静态数组生成一个双向链表数组OperationStates[22]。双向链表的每个节点数据域是一个整型常量。它的值等于与其相对应的状态控件链数组(PDAStateControlsList[53])的下标值。例如,如果节点的数据域为12,则对应PDAStateControlsList[12]状态控件链。具体的生成格式如图5所示。
javascript:window.open(this.src);" style="cursor:pointer;"/>
显示状态栈存放的数据是显示状态编号。具体数据是从初始状态到达当前状态所经过的所有状态,栈数据处理由int StateStackPop()、intStateStackGet()、void StateStackPush(int a)三个函数实现。具体处理情况如图6所示。
1.2 编程实现
有了以上一套数据结构之后,具体编写程序代码时,根据不同功能所要完成的任务和使用的数据结构,可归类待编写模块,从而提供代码复用率。如电话簿和记事本就可以共用同一套程序代码。因此,关于PDA的所有系统模块划分如图7所示。
系统各个模块间的连接用状态栈以及一些公共变量实现,根据状态栈的信息确定工作到了哪个状态,根据公共变量获得完成操作所需要的信息。程序每进入一个新模块调用的通用处理函数,先屏蔽主界面上固定键盘内的所有按钮,再显示本界面的按钮,最后将固定按钮连接到进入模块的处理函数中,实现固定键盘操作含义的转变。
javascript:window.open(this.src);" style="cursor:pointer;"/>
3 小结
利用状态图分析和以上定义的数据结构,可以进行任何界面的显示。这种编程方法有两大优点。
①快速方便地完成界面的任意修改。当需要改变界面时,只要改变控制数组中的值和控件静态数组中的值即可,无需修改任何代码。
②扩展嵌入式系统功能。只要进一步进行状态图分析,把新功能的状态顺序关系填写到状态链数组中,就可以完成新功能的进入和返回。