一、控件创建
通过维护一个基础数据结构或者在其上扩展属性来创建每一种控件类型,主要涉及到工厂模式。
如:
typedef struct
{
List_t*
children; //子组件链表
void* parent;//父组件
void* focusComponent;//焦点控件
PFUIOnPaint
pfOnPaint; //画图
PFUIOnFree
pfOnFree; //组件释放
PFUIOnKeyUp
pfOnKeyUp; //弹起事件
PFUIOnKeyDown
pfOnkeyDown; //按下事件
PFUIOnMessage
pfOnMsg; //消息处理回调
int16 x,y,w,h,screenX,screenY;
int8 type;//COMPONENT, FORM
int8 isVisiable;//不可见的不会被渲染
int8 isFocusable;//是否可以接受焦点
}Component_t;
控件主要分为两类:页控件和组件控件,其中页控件包括很多组件控件,组件控件保存在页控件的children链表中。
二、控件存储
控件存储在一个全局链表中,可以理解成单例模式。
三、控件事件
从全局链表中取出最上层窗口处理事件,主要是按下和弹起的事件。
四、控件消息,绘图,释放
主要涉及到职责链模式,通过循环逐层处理消息,绘图,释放。