按钮是简单的控件,它直接继承GRAPHIC_CTRL父类就能实现。当执行Create()方法时,先将字符串打印在区域中间,后画出一个矩形;Destroy()方法是空操作,不需要实现;执行Active()方法时,将字符串和矩形区域反白显示“上一页”;Inactive()方法同Create()方法一样,打印字符串和绘制矩形;RespBtn()方法中,它响应“确定”按键的具体动作,针对上/下/左/右方向按键它向调用者(如窗口)返回切换控件的消息;扩展的Enter()方法实现不同按键的“确定”动作响应,从而实现多态技术。
图2按键类的设计
4下拉菜单
Create()方法创建的下拉选择框如右图,
除绘制矩形框和框内字符串外,还需要打印框外的文本(定义为STATIC_TEXT),因而在类的属性中需要添加STATIC_TEXT的指针。Active()方法表现的效果是“MU识别 MAC”,和按钮激活的动作相似;Inactive()方法与Create()方法相同,Refresh()方法与Create()方法也相同。
在响应按键消息时就有区别了。如果“确定”键已经被按下,那么控件将呈现图3左边的选择项,这时需要计算是否有空间向下绘制选择项(可能会超过LCD的下端),如果没有空间将向上绘制选择项。“上/下按键”可以操作选择项,图3右显示了“下按键”操作的结果,因此也需要一个记录上下键位置的数据。再次按下“确定”键完成选择操作“MU识别 APPID”,如,而“取消”键随时可以退出操作过程。