HGui 初具一个GUI的模型了.它有scene,DC, ctrl, object, event等等概念,并自成一个系统, 形成一套类windows的思想,由于面向embed,故小巧.具有基本的图形图像处理能力,能进行图片拉伸,alpha, 亮度调节等等.显示采用两个surface,即绘图层和显示层分开.
一:概念介绍;
1.scene(场景);
一个场景必须有是全屏的.它有自己的场景过程-----即用户自定义的消息处理函数.形式类似于这样:
DEFINESCENE(SCENE_ID)
MSGMAPBEGIN
ONCREAT(OnCreat)
ONMSG(EVT_RESTORE, OnRestore)
ONMSG(EVT_PAINT, OnPaint)
ONMSG(EVT_TIMER, OnTimer)
ONDESTROY(OnDestroy)
ONKEYDN(OnKey)
ONMSG(EVT_EXIT, OnExit)
ONMSG(EVT_COMMAND, OnCommand)
MSGMAPEND
2.DC
DC相当于一块画布,是绘图或写字时要用的.
如在处理EVT_PAINT消息时用hai_BeginPaint()函数获得DC,用完后调用hai_EndPaint();如在别的地方则用hai_GetSceneDC(),释放用hai_DeletteDC();
3.Ctrl
目前支持push button, radio button, check button, select button(类似快捷方式),progress, editbox, scroll bar, static ctrl. 输入法控件,专用于触摸屏的有event area ctrl, list area ctrl.
4.object
支持一些常用对象,如pen, bitmap, brush, font, caret等等
5.event
整个系统是基于event驱动的.用于event处理的函数比较多.
hai_SendEvent():该函数直接调用事件处理过程,没用延迟.
hai_PostEvent();该函数把消息放入消息队列;
这是两个主要的也是常用的消息处理函数.
二,移植
HGui的移植非常简单;
1.把pLcdDisRam指向LCD的显示缓冲;
2.如要用自带的heap处理,则要调用hai_InitMemHeap();
3,完成haikey.c中键,触摸屏,时钟isr的正确放置.
三.场景操作:
1.必须初始化一个桌面场景.这是HGui运行的基础.这个桌面场景是永远存在的,不能被消毁.
2.基本操作:
GOTOSCENE(); 即跳到下一个场景,如这条语句放在EVT_DESTROY消息中,则本场景会消毁,返回的时候将回到本场景的前一个场景.
RETURNSCENE();返回到前一个场景;
SWITCHAPP();和GOTOSCENE()差不多,只不过更改了APPID;
3.快速回到桌面或进入一个APP;
此用于快捷键操作.
a.在定义场景时,如该场景会申请资源,则要处理EVT_EXIT消息,在这个消息中释放申请的资源.这是快捷操作的前提,否则会出现资源泄露.
b.在响应跳跃场景的消息中调用PREGOTOSCENE();起点从桌面开始;
c.桌面场景收到EVT_EXIT消息时不是释放资源,而要做特殊处理:
CALLPREGOTOSCENE();//从桌面场景开始调用;
pEvent->EventType = EVT_NULL;//完了,不用EVT_EXIT消息;
必须加入这两句;