一种GUI系统中的多窗口管理及Z序剪切实现核心代码(原创)
核心源代码:区域运算
点击此处下载 ourdev_527661.rar(文件大小:3K) (原文件名:GUI_Clip.rar)
窗口管理
点击此处下载 ourdev_527662.rar(文件大小:6K) (原文件名:GUI_Window.rar)
演示程序
点击此处下载 ourdev_527663.rar(文件大小:3K) (原文件名:GUI_Demo.rar) 附件又无法下载了。 演示程序的硬件平台:
CPU: S3C2440(主频降到271MHZ,总线频率降到67MHZ
LCD参数: 4.3寸TFT(480x272)
GUI颜色位数: 24位色 程序实际运行效果(同时运行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) http://cache.amobbs.com/bbs_upload782111/files_25/ourdev_527677.jpg
(原文件名:照片 1883.jpg) 用的是什么GUI? 自己开发的GUI回复【5楼】AVRman
用的是什么GUI?
-----------------------------------------------------------------------
自己开发的GUI 就是以前那个GUI的升级版,升级后支持多任务环境下的窗口管理和GDI绘图,并可以更有效地支持硬件加速. 绘图效率大为提高 这个要顶,楼主很强大! 楼主能否上传GUI.H niu.... 这么牛!! 太酷了GUI~~~~ 有兴趣,楼主能否上传GUI.H 回复【10楼】SWJ-DP
楼主能否上传GUI.H
-----------------------------------------------------------------------
GUI.h
ourdev_527811.rar(文件大小:1K) (原文件名:GUI.rar) MARK GUI 点击此处下载 ourdev_527893.rar(文件大小:17.86M) (原文件名:GUI演示.rar) 谢谢。 能发个完整的gui的代码吗?学习下 对你的液晶屏感兴趣,在哪里可以买到,多少钱? 自己做的LCD PCB 主板是Mini2440 mark 太强大了,不得不顶。 多窗口剪切线效果:
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) 实现剪切的原则:屏幕输出被分割成多个区域时,所有输出到屏幕上的矩形区绝不相交 半夜来顶 这个Z序剪切实现,好像魏永明也是这么干的。 能获得每次更新的Clip区域吗?这样可以加速绘制过程吧? 回复【30楼】zf8848
能获得每次更新的Clip区域吗?这样可以加速绘制过程吧?
-----------------------------------------------------------------------
當然可以~在任何時刻都可以通過
GetWindowClipRgn函數獲得指定窗口的當前剪切區域 回复【29楼】oldtom
这个Z序剪切实现,好像魏永明也是这么干的。
-----------------------------------------------------------------------
因為車輪都是圓的 我觉得用STL来做GUI的话会方便很多,但性能会下降一些 楼主是个强人 mark 2440平台上楼主测试过刷新速度吗? 记号。。。 如果一个窗口遮住了另一个窗口,但是被遮住的窗口显示的是动画,那么被遮住的部分还会参与绘图吗?如果上面的窗口是半透明的呢?
我以前做过一个项目要在240x128的点阵液晶上显示比较复杂的界面。当时我用的办法比较土,就是所有窗口都是全屏的,然后把一个32位整数分成4个8比特位段表示阶级关系,每个窗口(更不如说是每个屏)关联一个处理程序,当一个屏关毕时就显示它的“父屏”
楼主在GUI上的造诣很高啊,要是能用在一个开源的RTOS项目中就好了 回复【38楼】bluelucky
如果一个窗口遮住了另一个窗口,但是被遮住的窗口显示的是动画,那么被遮住的部分还会参与绘图吗?如果上面的窗口是半透明的呢?
我以前做过一个项目要在240x128的点阵液晶上显示比较复杂的界面。当时我用的办法比较土,就是所有窗口都是全屏的,然后把一个32位整数分成4个8比特位段表示阶级关系,每个窗口(更不如说是每个屏)关联一个处理程序,当一个屏关毕时就显示它的“父屏”
楼主在GUI上的造诣很高啊,要是能用在一个开源的RTOS项目中就好了
-----------------------------------------------------------------------
每个主窗口有独立的帧缓冲,可以通过程序控制是否绘制被遮住的部分,以提高工作效率;当输出到屏幕时,被遮住的部分是不会更新的 回复【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 回复【38楼】bluelucky
楼主在GUI上的造诣很高啊,要是能用在一个开源的RTOS项目中就好了
-----------------------------------------------------------------------
你认为哪一个RTOS比较合适? 回复【33楼】tyou
我觉得用STL来做GUI的话会方便很多,但性能会下降一些
-----------------------------------------------------------------------
STL :: SDL ?
"方便"是个比较笼统的概念~~~ 楼主的贴子做下记号 记号 mark LZ不知源代码能公布吗?这段时间俺也想整合一个GUI,想把UCGUI和minigui搞到一起,
对于ucgui主要是是对clip部分不太满意以空间换时间。
还有就是消息传递没有缓冲,没有真正多任务支持
而minigui个人觉得低层的绘图函数比较简陋,动态内存使用过于多,字体显示不够灵活(小型嵌入式系统,一些黑白屏上) 回复【46楼】clingos
LZ不知源代码能公布吗?这段时间俺也想整合一个GUI,想把UCGUI和minigui搞到一起,
对于ucgui主要是是对clip部分不太满意以空间换时间。
还有就是消息传递没有缓冲,没有真正多任务支持
而minigui个人觉得低层的绘图函数比较简陋,动态内存使用过于多,字体显示不够灵活(小型嵌入式系统,一些黑白屏上)
-----------------------------------------------------------------------
你打算用在什么场合? 目前纯是个人爱号,以后估计会用到工作上,因为我现在做的东西是小黑白液晶屏,GUI不必要,也写过一些GUI程序,对GUI特兴趣。
LZ难道不可以用在项目上吗???? 回复【48楼】clingos
-----------------------------------------------------------------------
这个GUI支持16位色,24位色,32位色;没有针对单色屏做过优化 ucGUI(开源版) < RAM占用量 < MiniGUI(开源版)
ucGUI(开源版) < MiniGUI(开源版) < GUI性能
推荐RAM容量:1MB以上(和LCD分辨率及同时运行的窗口数量有关)
推荐CPU级别:ARM720T(Cache Enable)@40MHZ性能级别以上 看来LZ的GUI也很是吃内存啊,问下能否给出窗口剪切算法所占用的内存与窗口数量的关系吗? 回复【51楼】clingos
看来LZ的GUI也很是吃内存啊,问下能否给出窗口剪切算法所占用的内存与窗口数量的关系吗?
-----------------------------------------------------------------------
现在的内存价格都很便宜,64MB的DDRII也不过10 RMB左右,以空间换性能,何乐而不为?况且本GUI并不是定位在低端硬件平台上运行。
这个窗口剪切算法不占用动态和静态内存; mark 楼主 SubtractRect函数怎么实现的? 好像没有给出啊. 楼主,可以认识一下吗? 有空交流交流. 每看一次顶一次。。 很强大!顶!! 楼主牛啊,MARK 回复【54楼】wanas
楼主 subtractrect函数怎么实现的? 好像没有给出啊.
-----------------------------------------------------------------------
两个矩形相减运算. 回复【59楼】liuweiele Liuwei
-----------------------------------------------------------------------
能发布下QQ?
到时大家有问题还可以问你哦
我的QQ
362570224 mark 围观 楼主,能否传下源码?
或者 关键的数据结构图 //设置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; //如果已是最顶层窗口,后面没有其它窗口
不知道我的说法对不对??
我正迷惑中。。。 你的程序通俗易懂些,对我们初学者,有很大益处。。。。thank u.
可惜的是,文件不全。。。 回复【59楼】liuweieleLiuwei
-----------------------------------------------------------------------
把这些基本剪裁操作的代码全放出来吧。 mark 这个GUI强大。牛人都在民间哪 mark 真是偶像啊,而且是实力派的,泪~~~~ 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 mark 关注中,,,,,,,,
mark 自己写的GUI MARK。。。楼主帖子都是精华。 太强悍呀!五体投地! 可惜啊,一年以后的升级看不到了.
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]