呵呵,我也自已设计了个GUI库
用纯C实现,可在不支持堆的系统上运行
因为我没看到楼主关于GUI对象/组件的 数据结构(结构体) 所以很多地方不好说
但就函数名(API) 定义来说还是有些建议
uint16 GUI_progressbar(uint8 percent,uint8 style);
uint16 GUI_button(TCHAR *text, void (*callback)(uint16 obj) );
uint16 GUI_ticks(TCHAR *options, void (*callback)(uint16 obj,uint16 item) );
uint16 GUI_editbox(uint16 limit, TCHAR *text, void (*callback)(uint16 obj,TCHAR *text) );
这样新增一类GUI组件就要多一个函数,而且之间的“共性”不能体现出来,也不利于代码组织与复用
至少Button 与 Edit有很大共同点
可以用 GUI_Object(int ObjType,TCHAR* text,void* CallBack); 就可以了,实事上多数组件可公用一个函数
另: 4楼的函数其实应该算在 GDI 中,可以参考下TC2.0 的帮助 GDI 函数集来构建GDI
GDI/GUI 画点的函数效率太低,真正的核心函数应该是 GUI_DrawBuf (void *buf,int x,int y,int w, int h,int mode);
buf 为显示数据,组成与你显示屏显存数据匹配,或只需简单转换
x,y 为绝对坐标起点
w,h 为显示数据宽,高
mode 为显示模式,可以是 与 或 反白 异或, 其中异或很有用显示光标时不可少
画线,画UI的图标输出字符(中英文) 都用这个函数实现
GUI_Imag 就不必要了,因为要根据显示屏的特点不同Imag的数据要统一转换成统一格式,用DrawBuf就成了