15年8个月前IP:未同步
294665
10楼
呵呵,我也自已设计了个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就成了
评论
文号 / 294665

浪迹天涯
名片发私信
学术分 0
总主题 5 帖总回复 43 楼拥有证书:笔友
注册于 2008/02/28 23:18:04最后登录 2023/05/17 14:15:10
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:0

个人简介

暂未填写
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的