图3下拉选择项

如果“确定”键没有被按下,“上/下/左/右按键”的响应简单为向调用者(如窗口)返回切换控件的消息。

很明显,响应按键操作需要一个状态机,因此类的属性中将添加BtnStat。

控件的Destroy()方法就变得繁忙了,它有三件事要干:首先向控件返回被选择项的索引,如果是“确定”键将返回有效下标,如果是“取消”键将返回无效下标;其次清除选择项绘制的整个区域;最后得把被选择项区域破坏的其他控件恢复。

恢复被破坏的控件将是一个值得商榷的话题,理想的方法是先将被破坏的区域保存起来再予以恢复,但这种方法需要操作像素VRAM区,我们将采用这种方法。它的硬件实现原理是LCD的控件器一般都支持READ_LCD_DATA()操作,当指定特定区域的位置和大小后,就可以读取该区域的像素数据并予以保存;软件上需要实现类似“压栈/弹栈”的操作,栈的深度依赖于需要保存VRAM的递归次数。有了软硬件的支持后,先把即将被破坏的区域予以压栈保存,当需要恢复该区域时,调用弹栈函数恢复该区域。

总结下拉选择框的类定义如图4所示:

图4下拉选择框类的设计

5文本输入框

右图显示了一个文本输入框的实例:,

除去矩形框前后的静态文本显示外,它和按钮的显示是很相似的。