为了节省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
|