搜索
bottom↓
回复: 78

一种GUI系统中的多窗口管理及Z序剪切实现核心代码(原创)

[复制链接]

出0入0汤圆

发表于 2010-1-23 00:15:17 | 显示全部楼层 |阅读模式
核心源代码:

区域运算
点击此处下载 ourdev_527661.rar(文件大小:3K) (原文件名:GUI_Clip.rar)

窗口管理
点击此处下载 ourdev_527662.rar(文件大小:6K) (原文件名:GUI_Window.rar)

演示程序
点击此处下载 ourdev_527663.rar(文件大小:3K) (原文件名:GUI_Demo.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-1-23 00:20:36 | 显示全部楼层
附件又无法下载了。

出0入0汤圆

 楼主| 发表于 2010-1-23 00:21:29 | 显示全部楼层
演示程序的硬件平台:
CPU:         S3C2440(主频降到271MHZ,总线频率降到67MHZ
LCD参数:     4.3寸TFT(480x272)
GUI颜色位数: 24位色

出0入0汤圆

 楼主| 发表于 2010-1-23 00:24:39 | 显示全部楼层
程序实际运行效果(同时运行8个独立的窗口):


(原文件名:照片 1846.jpg)


(原文件名:照片 1853.jpg)


(原文件名:照片 1854.jpg)


(原文件名:照片 1858.jpg)


(原文件名:照片 1859.jpg)


(原文件名:照片 1860.jpg)


(原文件名:照片 1865.jpg)


(原文件名:照片 1866.jpg)


(原文件名:照片 1876.jpg)


(原文件名:照片 1878.jpg)

出0入0汤圆

 楼主| 发表于 2010-1-23 00:34:00 | 显示全部楼层

(原文件名:照片 1883.jpg)

出0入0汤圆

发表于 2010-1-23 00:40:06 | 显示全部楼层
用的是什么GUI?

出0入0汤圆

 楼主| 发表于 2010-1-23 00:54:01 | 显示全部楼层
自己开发的GUI回复【5楼】AVRman
用的是什么GUI?
-----------------------------------------------------------------------

自己开发的GUI

出0入0汤圆

 楼主| 发表于 2010-1-23 00:58:03 | 显示全部楼层
就是以前那个GUI的升级版,升级后支持多任务环境下的窗口管理和GDI绘图,并可以更有效地支持硬件加速.

出0入0汤圆

 楼主| 发表于 2010-1-23 01:01:41 | 显示全部楼层
绘图效率大为提高

出0入0汤圆

发表于 2010-1-23 15:19:03 | 显示全部楼层
这个要顶,楼主很强大!

出0入0汤圆

发表于 2010-1-23 16:35:50 | 显示全部楼层
楼主能否上传GUI.H

出0入0汤圆

发表于 2010-1-23 16:38:20 | 显示全部楼层
niu....

出0入0汤圆

发表于 2010-1-23 17:38:36 | 显示全部楼层
这么牛!!

出0入0汤圆

发表于 2010-1-23 21:03:06 | 显示全部楼层
太酷了GUI~~~~

出0入0汤圆

发表于 2010-1-23 21:15:48 | 显示全部楼层
有兴趣,楼主能否上传GUI.H

出0入0汤圆

 楼主| 发表于 2010-1-23 21:18:25 | 显示全部楼层
回复【10楼】SWJ-DP
楼主能否上传GUI.H
-----------------------------------------------------------------------

GUI.h
ourdev_527811.rar(文件大小:1K) (原文件名:GUI.rar)

出0入0汤圆

发表于 2010-1-23 23:26:29 | 显示全部楼层
MARK GUI

出0入0汤圆

 楼主| 发表于 2010-1-24 00:17:46 | 显示全部楼层
点击此处下载 ourdev_527893.rar(文件大小:17.86M) (原文件名:GUI演示.rar)

出0入0汤圆

发表于 2010-1-24 00:39:26 | 显示全部楼层
谢谢。

出0入0汤圆

发表于 2010-1-26 08:33:23 | 显示全部楼层
能发个完整的gui的代码吗?学习下

出0入0汤圆

发表于 2010-1-26 12:17:16 | 显示全部楼层
对你的液晶屏感兴趣,在哪里可以买到,多少钱?

出0入0汤圆

 楼主| 发表于 2010-1-26 13:55:04 | 显示全部楼层
自己做的LCD PCB

出0入0汤圆

 楼主| 发表于 2010-1-26 13:58:42 | 显示全部楼层
主板是Mini2440

出0入0汤圆

发表于 2010-1-27 10:49:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-27 11:20:42 | 显示全部楼层
太强大了,不得不顶。

出0入0汤圆

 楼主| 发表于 2010-2-1 00:40:33 | 显示全部楼层
多窗口剪切线效果:


(原文件名:SNC00047.jpg)


(原文件名:SNC00048.jpg)

出0入0汤圆

 楼主| 发表于 2010-2-1 00:47:12 | 显示全部楼层
实现剪切的原则:屏幕输出被分割成多个区域时,所有输出到屏幕上的矩形区绝不相交

出0入0汤圆

发表于 2010-2-1 00:59:47 | 显示全部楼层
半夜来顶

出0入0汤圆

发表于 2010-2-26 13:30:46 | 显示全部楼层
这个Z序剪切实现,好像魏永明也是这么干的。

出0入0汤圆

发表于 2010-2-26 15:00:57 | 显示全部楼层
能获得每次更新的Clip区域吗?这样可以加速绘制过程吧?

出0入0汤圆

 楼主| 发表于 2010-2-27 01:32:52 | 显示全部楼层
回复【30楼】zf8848  
能获得每次更新的Clip区域吗?这样可以加速绘制过程吧?
-----------------------------------------------------------------------

當然可以~在任何時刻都可以通過
GetWindowClipRgn函數獲得指定窗口的當前剪切區域

出0入0汤圆

 楼主| 发表于 2010-2-27 01:39:02 | 显示全部楼层
回复【29楼】oldtom  
这个Z序剪切实现,好像魏永明也是这么干的。
-----------------------------------------------------------------------

因為車輪都是圓的

出0入0汤圆

发表于 2010-2-27 03:09:25 | 显示全部楼层
我觉得用STL来做GUI的话会方便很多,但性能会下降一些

出0入0汤圆

发表于 2010-2-27 05:38:36 | 显示全部楼层
楼主是个强人

出0入0汤圆

发表于 2010-2-27 08:56:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-2-27 10:01:40 | 显示全部楼层
2440平台上楼主测试过刷新速度吗?

出0入0汤圆

发表于 2010-2-27 10:14:12 | 显示全部楼层
记号。。。

出0入0汤圆

发表于 2010-2-27 10:25:23 | 显示全部楼层
如果一个窗口遮住了另一个窗口,但是被遮住的窗口显示的是动画,那么被遮住的部分还会参与绘图吗?如果上面的窗口是半透明的呢?
我以前做过一个项目要在240x128的点阵液晶上显示比较复杂的界面。当时我用的办法比较土,就是所有窗口都是全屏的,然后把一个32位整数分成4个8比特位段表示阶级关系,每个窗口(更不如说是每个屏)关联一个处理程序,当一个屏关毕时就显示它的“父屏”
楼主在GUI上的造诣很高啊,要是能用在一个开源的RTOS项目中就好了

出0入0汤圆

 楼主| 发表于 2010-2-27 11:06:35 | 显示全部楼层
回复【38楼】bluelucky
如果一个窗口遮住了另一个窗口,但是被遮住的窗口显示的是动画,那么被遮住的部分还会参与绘图吗?如果上面的窗口是半透明的呢?
我以前做过一个项目要在240x128的点阵液晶上显示比较复杂的界面。当时我用的办法比较土,就是所有窗口都是全屏的,然后把一个32位整数分成4个8比特位段表示阶级关系,每个窗口(更不如说是每个屏)关联一个处理程序,当一个屏关毕时就显示它的“父屏”
楼主在GUI上的造诣很高啊,要是能用在一个开源的RTOS项目中就好了
-----------------------------------------------------------------------

每个主窗口有独立的帧缓冲,可以通过程序控制是否绘制被遮住的部分,以提高工作效率;当输出到屏幕时,被遮住的部分是不会更新的

出0入0汤圆

 楼主| 发表于 2010-2-27 11:13:01 | 显示全部楼层
回复【36楼】zf8848
2440平台上楼主测试过刷新速度吗?
-----------------------------------------------------------------------

480*272分辨率,24位色全屏刷新速度:>100HZ

可以参考一下这个帖子,这还只是仅仅是通过 旋转变换 之后的刷新速度.

高效率 图像任意角度旋转算法(用整数运算实现)
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3868506&bbs_page_no=1&search_mode=4&search_text=liuweiele&bbs_id=9999

出0入0汤圆

 楼主| 发表于 2010-2-27 11:23:02 | 显示全部楼层
回复【38楼】bluelucky

楼主在GUI上的造诣很高啊,要是能用在一个开源的RTOS项目中就好了
-----------------------------------------------------------------------

你认为哪一个RTOS比较合适?

出0入0汤圆

 楼主| 发表于 2010-2-27 11:29:31 | 显示全部楼层
回复【33楼】tyou
我觉得用STL来做GUI的话会方便很多,但性能会下降一些
-----------------------------------------------------------------------

STL :: SDL ?

"方便"是个比较笼统的概念~~~

出0入0汤圆

发表于 2010-3-8 15:56:41 | 显示全部楼层
楼主的贴子做下记号

出0入0汤圆

发表于 2010-3-8 19:01:06 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-3-9 11:02:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-11 10:41:23 | 显示全部楼层
LZ不知源代码能公布吗?这段时间俺也想整合一个GUI,想把UCGUI和minigui搞到一起,
对于ucgui主要是是对clip部分不太满意以空间换时间。
还有就是消息传递没有缓冲,没有真正多任务支持
而minigui个人觉得低层的绘图函数比较简陋,动态内存使用过于多,字体显示不够灵活(小型嵌入式系统,一些黑白屏上)

出0入0汤圆

 楼主| 发表于 2010-3-11 21:03:28 | 显示全部楼层
回复【46楼】clingos
LZ不知源代码能公布吗?这段时间俺也想整合一个GUI,想把UCGUI和minigui搞到一起,
对于ucgui主要是是对clip部分不太满意以空间换时间。
还有就是消息传递没有缓冲,没有真正多任务支持
而minigui个人觉得低层的绘图函数比较简陋,动态内存使用过于多,字体显示不够灵活(小型嵌入式系统,一些黑白屏上)
-----------------------------------------------------------------------

你打算用在什么场合?

出0入0汤圆

发表于 2010-3-12 16:21:21 | 显示全部楼层
目前纯是个人爱号,以后估计会用到工作上,因为我现在做的东西是小黑白液晶屏,GUI不必要,也写过一些GUI程序,对GUI特兴趣。
LZ难道不可以用在项目上吗????

出0入0汤圆

 楼主| 发表于 2010-3-12 17:13:24 | 显示全部楼层
回复【48楼】clingos
-----------------------------------------------------------------------

这个GUI支持16位色,24位色,32位色;没有针对单色屏做过优化

出0入0汤圆

 楼主| 发表于 2010-3-12 17:23:58 | 显示全部楼层
ucGUI(开源版) < RAM占用量 < MiniGUI(开源版)
ucGUI(开源版) < MiniGUI(开源版) < GUI性能

推荐RAM容量:  1MB以上(和LCD分辨率及同时运行的窗口数量有关)
推荐CPU级别:  ARM720T(Cache Enable)@40MHZ性能级别以上

出0入0汤圆

发表于 2010-3-14 22:59:26 | 显示全部楼层
看来LZ的GUI也很是吃内存啊,问下能否给出窗口剪切算法所占用的内存与窗口数量的关系吗?

出0入0汤圆

 楼主| 发表于 2010-3-15 02:17:26 | 显示全部楼层
回复【51楼】clingos
看来LZ的GUI也很是吃内存啊,问下能否给出窗口剪切算法所占用的内存与窗口数量的关系吗?
-----------------------------------------------------------------------

现在的内存价格都很便宜,64MB的DDRII也不过10 RMB左右,以空间换性能,何乐而不为?况且本GUI并不是定位在低端硬件平台上运行。
这个窗口剪切算法不占用动态和静态内存;

出0入0汤圆

发表于 2010-3-24 14:17:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-12 11:03:35 | 显示全部楼层
楼主 SubtractRect函数怎么实现的? 好像没有给出啊.

出0入0汤圆

发表于 2010-10-18 16:58:35 | 显示全部楼层
楼主,可以认识一下吗? 有空交流交流.

出0入0汤圆

发表于 2010-12-14 18:56:39 | 显示全部楼层
每看一次顶一次。。

出0入0汤圆

发表于 2010-12-14 19:05:27 | 显示全部楼层
很强大!顶!!

出0入0汤圆

发表于 2010-12-14 19:18:50 | 显示全部楼层
楼主牛啊,MARK

出0入0汤圆

 楼主| 发表于 2010-12-14 21:12:22 | 显示全部楼层
回复【54楼】wanas
楼主 subtractrect函数怎么实现的? 好像没有给出啊.
-----------------------------------------------------------------------

两个矩形相减运算.

出0入0汤圆

发表于 2010-12-19 17:41:14 | 显示全部楼层
回复【59楼】liuweiele Liuwei
-----------------------------------------------------------------------

能发布下QQ?
到时大家有问题还可以问你哦
我的QQ
362570224

出0入0汤圆

发表于 2010-12-19 22:11:57 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-12-19 23:26:55 | 显示全部楼层

出0入0汤圆

发表于 2010-12-19 23:47:42 | 显示全部楼层
围观

出0入0汤圆

发表于 2010-12-21 10:58:05 | 显示全部楼层
楼主,能否传下源码?
或者 关键的数据结构图

出0入0汤圆

发表于 2010-12-21 11:32:05 | 显示全部楼层
//设置hwnd为顶层主窗口

int        SetTopOfMainWindow(HWND hwnd)
{
        HWND hLastWnd;
        WINDOW *pWin,*pLastWin,*PrevWin,*NextWin;
        ////
         //ShowMainWindow();
        if(hwnd==0)                 return 0;
        if(!IsMainWindow(hwnd))        return 0;
        hLastWnd=GetLastWindow(hwnd);         //获得最后一个窗口
        if(hLastWnd==0)                return 1;         //如果后面已没有窗口
        if(hLastWnd==hwnd)                 return 1;         //如果已是最顶层窗口
         。。。

这个函数中这
if(hLastWnd==0)                return 1;         //如果后面已没有窗口
这句注释是不是错的?
因为
hLastWnd=GetLastWindow(hwnd);
hLastWnd能为0,是因为传入参数hwnd为0,所以应该是传入非法窗口造成返回为0
而在此语句之前已经判断
if(hwnd==0)                 return 0;
所以后面hLastWnd=0的情况是不出现的。
而当传的参数窗口本身就是最后一个窗口时,此时调用hLastWnd=GetLastWindow(hwnd);
会使hLastWnd==hwnd,也就是表示后面已没有窗口。

所以
if(hLastWnd==0)                return 1;         //传入非法窗口句柄
if(hLastWnd==hwnd)                 return 1;         //如果已是最顶层窗口,后面没有其它窗口

不知道我的说法对不对??
我正迷惑中。。。

出0入0汤圆

发表于 2010-12-21 14:25:45 | 显示全部楼层
你的程序通俗易懂些,对我们初学者,有很大益处。。。。thank u.
可惜的是,文件不全。。。

出0入0汤圆

发表于 2010-12-23 12:21:38 | 显示全部楼层
回复【59楼】liuweiele  Liuwei
-----------------------------------------------------------------------

把这些基本剪裁操作的代码全放出来吧。

出50入0汤圆

发表于 2010-12-23 13:32:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-23 19:09:57 | 显示全部楼层
这个GUI强大。牛人都在民间哪

出0入0汤圆

发表于 2010-12-24 18:41:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-4 18:18:00 | 显示全部楼层
真是偶像啊,而且是实力派的,泪~~~~

出0入0汤圆

 楼主| 发表于 2011-6-4 18:32:02 | 显示全部楼层
1年以后,升级......
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4758877&bbs_page_no=1&search_mode=4&search_text=liuweiele&bbs_id=9999

出0入0汤圆

发表于 2011-7-20 20:29:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-24 20:13:06 | 显示全部楼层
关注中,,,,,,,,

mark 自己写的GUI

出0入0汤圆

发表于 2011-7-25 08:37:07 | 显示全部楼层
MARK。。。楼主帖子都是精华。

出0入0汤圆

发表于 2011-7-26 15:14:41 | 显示全部楼层
太强悍呀!五体投地!

出0入0汤圆

发表于 2014-1-10 09:54:54 | 显示全部楼层
可惜啊,一年以后的升级看不到了.
http://www.ourdev.cn/bbs/bbs_con ... ele&bbs_id=9999已经失效了.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 01:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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