打印

ucgui 界面切换时删掉所有控件和窗体的方法讨论

[复制链接]
4553|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
610095871|  楼主 | 2013-10-6 14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了节省ram,所以很多界面切换的时候需要把之前建立的窗体和控件进行删除,这样就会释放控件所占用的内存。
我这边想到了两个方法,其中一个就是记录所有的窗体句柄,之后调用WM_DeleteWindow这个函数来进行删除操作。这个是比较常用的。比较灵活,可以删除指定的窗体或控件。
      我今天介绍的主要是把所有的窗体全部删除,只留下桌面窗体。
      根据ucgui的源码我们知道ucgui通过链表来管理窗体,桌面 -窗体1-。。。。---窗体N ,0
      这样我们只要从桌面窗体开始依次获取其后面的窗体之后调用删除窗体的函数即可。
    WM_HWIN WM__FinNextLink(WM_HWIN hWin)
    {
              WM_Obj* pWin;
              WM_HWIN hNext;
             if(hWin)
             {
                        pWin = WM_H2P(hWin);
                        if(pWin)
                       {
                                   hNext=pWin->hNextLin;
                                   return hNext;
                       }
              }
            return 0;
}


void DeleteAllWind(void)
{
       int Next=0;
       while((Next=WM__FinNextLink(1))!=0)
      {
             WM_DeleteWindow(Next);
      }
      GUI_Clear();
}
每次从桌面窗体开始获取下一个窗体句柄如果不为0就直接删掉、
如果您还有其他更好的方法欢迎一起交流
QQ610095871
沙发
kseeker| | 2013-10-6 17:53 | 只看该作者
删掉确实可以释放内存,不过我建议你这么做小心点。这么做的话,处理不好会出现内存碎片问题:剩余内存总量还够,但却没有足够大的连续空间了。

使用特权

评论回复
板凳
hkcj| | 2013-10-7 10:15 | 只看该作者
学习学习  这一块  还是要跟在楼上的好好学学

使用特权

评论回复
地板
610095871|  楼主 | 2013-10-7 22:45 | 只看该作者
kseeker 发表于 2013-10-6 17:53
删掉确实可以释放内存,不过我建议你这么做小心点。这么做的话,处理不好会出现内存碎片问题:剩余内存总量 ...

ucgui本身是支持碎片整理的。

使用特权

评论回复
5
kseeker| | 2013-10-8 11:09 | 只看该作者
610095871 发表于 2013-10-7 22:45
ucgui本身是支持碎片整理的。

那倒是真好,我被这东西坑过。
话说,如果要全删掉,干脆重新初始化一遍怎么样?

使用特权

评论回复
6
zoupengju| | 2014-5-28 09:25 | 只看该作者
610095871 发表于 2013-10-7 22:45
ucgui本身是支持碎片整理的。

怎么做? 我这里随机的会有要删除按钮删不掉  用碎片整理能解决问题吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:UCGUI源码学习中---Q群295214484 http://ucgui.taobao.com

27

主题

323

帖子

10

粉丝