liuweiele 发表于 2010-1-23 00:15:17

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

核心源代码:

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

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

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

astudent 发表于 2010-1-23 00:20:36

附件又无法下载了。

liuweiele 发表于 2010-1-23 00:21:29

演示程序的硬件平台:
CPU:         S3C2440(主频降到271MHZ,总线频率降到67MHZ
LCD参数:   4.3寸TFT(480x272)
GUI颜色位数: 24位色

liuweiele 发表于 2010-1-23 00:24:39

程序实际运行效果(同时运行8个独立的窗口):

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527665.jpg
(原文件名:照片 1846.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527666.jpg
(原文件名:照片 1853.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527667.jpg
(原文件名:照片 1854.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527668.jpg
(原文件名:照片 1858.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527669.jpg
(原文件名:照片 1859.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527670.jpg
(原文件名:照片 1860.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527671.jpg
(原文件名:照片 1865.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527672.jpg
(原文件名:照片 1866.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527673.jpg
(原文件名:照片 1876.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527674.jpg
(原文件名:照片 1878.jpg)

liuweiele 发表于 2010-1-23 00:34:00

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527677.jpg
(原文件名:照片 1883.jpg)

AVRman 发表于 2010-1-23 00:40:06

用的是什么GUI?

liuweiele 发表于 2010-1-23 00:54:01

自己开发的GUI回复【5楼】AVRman
用的是什么GUI?
-----------------------------------------------------------------------

自己开发的GUI

liuweiele 发表于 2010-1-23 00:58:03

就是以前那个GUI的升级版,升级后支持多任务环境下的窗口管理和GDI绘图,并可以更有效地支持硬件加速.

liuweiele 发表于 2010-1-23 01:01:41

绘图效率大为提高

tedden 发表于 2010-1-23 15:19:03

这个要顶,楼主很强大!

SWJ-DP 发表于 2010-1-23 16:35:50

楼主能否上传GUI.H

Excellence 发表于 2010-1-23 16:38:20

niu....

adolfshxq 发表于 2010-1-23 17:38:36

这么牛!!

dzyong 发表于 2010-1-23 21:03:06

太酷了GUI~~~~

abs123 发表于 2010-1-23 21:15:48

有兴趣,楼主能否上传GUI.H

liuweiele 发表于 2010-1-23 21:18:25

回复【10楼】SWJ-DP
楼主能否上传GUI.H
-----------------------------------------------------------------------

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

eduhf_123 发表于 2010-1-23 23:26:29

MARK GUI

liuweiele 发表于 2010-1-24 00:17:46

点击此处下载 ourdev_527893.rar(文件大小:17.86M) (原文件名:GUI演示.rar)

jchqxl 发表于 2010-1-24 00:39:26

谢谢。

hfmedical 发表于 2010-1-26 08:33:23

能发个完整的gui的代码吗?学习下

alexmayer 发表于 2010-1-26 12:17:16

对你的液晶屏感兴趣,在哪里可以买到,多少钱?

liuweiele 发表于 2010-1-26 13:55:04

自己做的LCD PCB

liuweiele 发表于 2010-1-26 13:58:42

主板是Mini2440

ljt8015 发表于 2010-1-27 10:49:18

mark

wenwu 发表于 2010-1-27 11:20:42

太强大了,不得不顶。

liuweiele 发表于 2010-2-1 00:40:33

多窗口剪切线效果:

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_531321.jpg
(原文件名:SNC00047.jpg)

http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_531322.jpg
(原文件名:SNC00048.jpg)

liuweiele 发表于 2010-2-1 00:47:12

实现剪切的原则:屏幕输出被分割成多个区域时,所有输出到屏幕上的矩形区绝不相交

quzegang 发表于 2010-2-1 00:59:47

半夜来顶

oldtom 发表于 2010-2-26 13:30:46

这个Z序剪切实现,好像魏永明也是这么干的。

zf8848 发表于 2010-2-26 15:00:57

能获得每次更新的Clip区域吗?这样可以加速绘制过程吧?

liuweiele 发表于 2010-2-27 01:32:52

回复【30楼】zf8848
能获得每次更新的Clip区域吗?这样可以加速绘制过程吧?
-----------------------------------------------------------------------

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

liuweiele 发表于 2010-2-27 01:39:02

回复【29楼】oldtom
这个Z序剪切实现,好像魏永明也是这么干的。
-----------------------------------------------------------------------

因為車輪都是圓的

tyou 发表于 2010-2-27 03:09:25

我觉得用STL来做GUI的话会方便很多,但性能会下降一些

zjn8888 发表于 2010-2-27 05:38:36

楼主是个强人

xinyou 发表于 2010-2-27 08:56:49

mark

zf8848 发表于 2010-2-27 10:01:40

2440平台上楼主测试过刷新速度吗?

nil0 发表于 2010-2-27 10:14:12

记号。。。

bluelucky 发表于 2010-2-27 10:25:23

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

liuweiele 发表于 2010-2-27 11:06:35

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

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

liuweiele 发表于 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

liuweiele 发表于 2010-2-27 11:23:02

回复【38楼】bluelucky

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

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

liuweiele 发表于 2010-2-27 11:29:31

回复【33楼】tyou
我觉得用STL来做GUI的话会方便很多,但性能会下降一些
-----------------------------------------------------------------------

STL :: SDL ?

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

ep1c3 发表于 2010-3-8 15:56:41

楼主的贴子做下记号

oldmen 发表于 2010-3-8 19:01:06

记号

jackmo 发表于 2010-3-9 11:02:02

mark

clingos 发表于 2010-3-11 10:41:23

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

liuweiele 发表于 2010-3-11 21:03:28

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

你打算用在什么场合?

clingos 发表于 2010-3-12 16:21:21

目前纯是个人爱号,以后估计会用到工作上,因为我现在做的东西是小黑白液晶屏,GUI不必要,也写过一些GUI程序,对GUI特兴趣。
LZ难道不可以用在项目上吗????

liuweiele 发表于 2010-3-12 17:13:24

回复【48楼】clingos
-----------------------------------------------------------------------

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

liuweiele 发表于 2010-3-12 17:23:58

ucGUI(开源版) < RAM占用量 < MiniGUI(开源版)
ucGUI(开源版) < MiniGUI(开源版) < GUI性能

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

clingos 发表于 2010-3-14 22:59:26

看来LZ的GUI也很是吃内存啊,问下能否给出窗口剪切算法所占用的内存与窗口数量的关系吗?

liuweiele 发表于 2010-3-15 02:17:26

回复【51楼】clingos
看来LZ的GUI也很是吃内存啊,问下能否给出窗口剪切算法所占用的内存与窗口数量的关系吗?
-----------------------------------------------------------------------

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

wanas 发表于 2010-3-24 14:17:52

mark

wanas 发表于 2010-8-12 11:03:35

楼主 SubtractRect函数怎么实现的? 好像没有给出啊.

fish420 发表于 2010-10-18 16:58:35

楼主,可以认识一下吗? 有空交流交流.

niba 发表于 2010-12-14 18:56:39

每看一次顶一次。。

caiyue3577 发表于 2010-12-14 19:05:27

很强大!顶!!

huatong 发表于 2010-12-14 19:18:50

楼主牛啊,MARK

liuweiele 发表于 2010-12-14 21:12:22

回复【54楼】wanas
楼主 subtractrect函数怎么实现的? 好像没有给出啊.
-----------------------------------------------------------------------

两个矩形相减运算.

csj100 发表于 2010-12-19 17:41:14

回复【59楼】liuweiele Liuwei
-----------------------------------------------------------------------

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

yuhui 发表于 2010-12-19 22:11:57

mark

liuweiele 发表于 2010-12-19 23:26:55

rlogin 发表于 2010-12-19 23:47:42

围观

csj100 发表于 2010-12-21 10:58:05

楼主,能否传下源码?
或者 关键的数据结构图

csj100 发表于 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;       //如果已是最顶层窗口,后面没有其它窗口

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

csj100 发表于 2010-12-21 14:25:45

你的程序通俗易懂些,对我们初学者,有很大益处。。。。thank u.
可惜的是,文件不全。。。

wanas 发表于 2010-12-23 12:21:38

回复【59楼】liuweieleLiuwei
-----------------------------------------------------------------------

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

yuzr 发表于 2010-12-23 13:32:05

mark

wu0232 发表于 2010-12-23 19:09:57

这个GUI强大。牛人都在民间哪

hubeilcsun3 发表于 2010-12-24 18:41:07

mark

MZ_Guo 发表于 2011-6-4 18:18:00

真是偶像啊,而且是实力派的,泪~~~~

liuweiele 发表于 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

dreamboy258 发表于 2011-7-20 20:29:24

mark

guxingganyue 发表于 2011-7-24 20:13:06

关注中,,,,,,,,

mark 自己写的GUI

commshare 发表于 2011-7-25 08:37:07

MARK。。。楼主帖子都是精华。

cunlingwang 发表于 2011-7-26 15:14:41

太强悍呀!五体投地!

astankvai 发表于 2014-1-10 09:54:54

可惜啊,一年以后的升级看不到了.
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4758877&bbs_page_no=1&search_mode=4&search_text=liuweiele&bbs_id=9999已经失效了.
页: [1]
查看完整版本: 一种GUI系统中的多窗口管理及Z序剪切实现核心代码(原创)