开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7600|回复: 31
打印 上一主题 下一主题
收起左侧

[易源码分享] 上次比赛快速启动器更新开源,顺带讲讲自绘的原理

[复制链接]
跳转到指定楼层
发表于 2019-4-30 21:54:37 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   江苏省连云港市
分享源码
界面截图: -
是否带模块: -
备注说明: -
上次开源大赛我开源了一个快速启动器
https://125.confly.eu.org/forum.php?mod=viewthread&tid=14266155&extra=
由于当时是仓促完成,BUG很多(EX_DUI2.0模块也有很大的锅)
我现在将其更新了,功能没有太大变化,主要是修正了奔溃,界面不和谐的问题,所以EX模块必须要用我修改后的,不然无法编译
新的功能演示:
项目分组操作:

界面功能演示:



runfast.rar (943.38 KB, 下载次数: 255)



网上对于界面库的教程比较多,但是我找不到其原理的教学,只能自己研究.
最近研究了EX_DUI2.0这个很老的模块,说一下我的发现

首先,我们知道系统原生组件是一个特殊的窗口,而在GDI+的界面库中,一个组件就是一张位图
创建一个组件的核心源码是

创建一张位图,同时获得其图形指针,方便对其绘制

那么组件又是如何绘制到窗口上的呢?
在组件基类里保存着这些类成员变量

这些变量保存着组件的同层与子层组件的指针
在最终绘制的过程中,通过递归的方式,完成全部组件的绘制,所以后创建的组件绘制再最上面

同样的,鼠标消息也是通过这个机制,递归查找鼠标所在的组件,并把这个组件设置为焦点组件,保存在窗口类的成员变量里

(从最后一个组件开始找起,因为最后一个组件在最上层)
现在新的界面库实现则是将这些信息存储到一张链表或者是哈希表中,但本质上我觉得是差不多的


如果我们创建属于自己的组件
只需要必须的三个环节
创建方法,窗口过程,绘制过程


通过创建方法,调用父类初始化命令,一个组件就被创建了
同时保存组件的属性,如颜色,字体等


组件的窗口过程必须是组件的第三个方法

通过常量表发现,组件方法的消息回调是第四十个方法,而控件基类中只有39个方法,所以这个组件过程的函数必须是第三个方法,(前面的_初始化和_销毁覆盖了父类方法,所以不计数)

易语言的对象内存模型如下(为了实现多态,易语言把所有的对象都自动声明为虚函数了)




而绘制过程就是处理绘画消息的方法
通过  Ex_BeginPaint (组件句柄, 绘画数据, , 真)  
绘画数据.mGraphics就是初始化得到的组件位图的图形指针
绘画数据.rectf就是组件的矩形区域
获取到组件的图形指针Graphics,就可以对组件位图进行随心所欲的绘制了
然后通过   Ex_EndPaint (组件句柄, 绘画数据)   告诉界面库你对这个组件的绘制已经完成,界面库就会再窗口上重新绘制这个组件所在的区域

只需要这三样,一个最简单的组件就可以自己实现了,如简易标签



评分

参与人数 6好评 +6 精币 +16 收起 理由
刘学森 + 1 开源精神必须支持~
空竹 + 1 + 3 奉上小小红包希望笑纳
黑暗法师 + 1 + 1 感谢分享,很给力!~
易语言资源网 + 1 + 5 支持开源~!感谢分享
大司命 + 1 + 5 奉上小小红包希望笑纳
maozaiba + 1 + 2 全论坛易友发来贺电

查看全部评分


本帖被以下淘专辑推荐:

结帖率:100% (1/1)
31
发表于 2024-7-12 00:17:32 | 只看该作者   内蒙古自治区包头市
界面简洁 不错
回复 支持 反对

使用道具 举报

30
发表于 2023-12-16 18:56:05 | 只看该作者   江苏省南通市
界面简洁 不错
回复 支持 反对

使用道具 举报

签到天数: 12 天

29
发表于 2023-11-2 17:58:47 | 只看该作者   四川省达州市
界面简洁 不错
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 14 天

28
发表于 2023-1-28 20:46:34 | 只看该作者   广东省佛山市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 1 天

27
发表于 2022-8-27 13:09:25 | 只看该作者   河南省郑州市
大佬666   正好需要
回复 支持 反对

使用道具 举报

签到天数: 4 天

26
发表于 2021-2-21 19:59:43 | 只看该作者   江苏省无锡市
谢谢分享,收藏学习
回复 支持 反对

使用道具 举报

25
发表于 2020-12-31 21:09:02 高大上手机用户 | 只看该作者   湖南省益阳市
过来看看
回复 支持 反对

使用道具 举报

结帖率:75% (9/12)

签到天数: 21 天

24
发表于 2020-12-20 11:42:21 | 只看该作者   甘肃省平凉市
优秀啊,顶顶顶顶
回复 支持 反对

使用道具 举报

结帖率:75% (9/12)

签到天数: 21 天

23
发表于 2020-12-20 11:26:32 | 只看该作者   甘肃省平凉市
比赛快速启动器
回复 支持 反对

使用道具 举报

结帖率:97% (97/100)
22
发表于 2020-12-19 15:12:25 | 只看该作者   湖北省武汉市
前来学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表