硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6475|回复: 11
收起左侧

[emWin] emwin 窗体切换 ,删除窗口后内存无法释放。

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2014-4-24 11:12:34 | 显示全部楼层 |阅读模式
基于uCOS-II+STemWin+Flash这个工程,实现两个窗体的切换,切到一定次数就死了,分配给gui的内存越多,切换次数越多,估计是删除窗口后内寸无法释放。部分代码如下

void MainTask1(void) {
  
WM_HWIN hItem;
     
  CreateWindow();

  while(1)
    {  
   GUI_Delay(5);
   switch(TZ)
   {   
     case 0x0001:
     {
     Create_KEY_Window();
     TZ=0x0000;
     }     
     break;
   
         case 0x0002:
    {

        CreateWindow();
        TZ=0x0000;
     }     
      break;
  }  
   
  
  }
}



WM_HWIN CreateWindow(void) {
  WM_HWIN hDlgFrame;
     
  GUI_Init();
  GUI_CURSOR_Show();     
  WM_SetCreateFlags(WM_CF_MEMDEV);   
    WM_SetCallback(WM_HBKWIN, _cbDialog);
  hDlgFrame = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, 0, 0, 0);
}  
WM_HWIN Create_KEY_Window(void) {
   
    WM_HWIN hDlgFrame;
   
  GUI_Init();
  GUI_CURSOR_Show();
  WM_SetCreateFlags(WM_CF_MEMDEV);   
  WM_SetCallback(WM_HBKWIN, _cbDialog_KEY);  
  hDlgFrame = GUI_CreateDialogBox(_aDialogCreate_KEY, GUI_COUNTOF(_aDialogCreate_KEY), &_cbDialog_KEY, 0, 0, 0);
   
  
  return hDlgFrame;
}
窗体1回调函数下按键响应
case ID_BUTTON_1: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
            {
               
                WM_DeleteWindow(pMsg->hWin);
              //Create_KEY_Window();
            
                TZ=0x0001;
            }  
                     break;

窗体2回调函数下按键响应

case ID_BUTTON_11: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
            {
            
             WM_DeleteWindow(pMsg->hWin);
             TZ=0x0002;
            }
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2014-4-24 11:14:38 | 显示全部楼层
自己顶自己 求大神 指点思路   我用的是窗体 ,不是非阻塞对话框。。。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2014-4-24 11:49:45 | 显示全部楼层
没有人遇到一样的问题吗。。。求帮忙 搞了一天搞不出
回复

使用道具 举报

15

主题

54

回帖

99

积分

初级会员

积分
99
发表于 2014-4-24 20:21:10 | 显示全部楼层
while(1)
    {  
   GUI_Delay(5);
   switch(TZ)
   {   
     case 0x0001:
     {
 WM_DeleteWindow(hWinX); 
     Create_KEY_Window();
     TZ=0x0000;
     }     
     break;  这样试试
回复

使用道具 举报

16

主题

51

回帖

99

积分

初级会员

积分
99
QQ
发表于 2014-5-2 15:46:43 | 显示全部楼层
我也是差不多的问题   你解决了吗
回复

使用道具 举报

1

主题

12

回帖

1

积分

新手上路

积分
1
发表于 2014-5-9 22:59:15 | 显示全部楼层
标记一下  我的应该也是这个问题了
回复

使用道具 举报

5

主题

109

回帖

124

积分

初级会员

积分
124
发表于 2014-5-20 11:47:18 | 显示全部楼层
EMWIN还是有点坑啊,很多问题手册上写的不清楚,就窗体切换这问题都不知道怎么弄好
回复

使用道具 举报

5

主题

16

回帖

5

积分

新手上路

积分
5
发表于 2014-5-23 15:11:42 | 显示全部楼层
到现在为止,我看了很多帖子,都没有一个人完整的讲讲怎么解决的,哎
回复

使用道具 举报

8

主题

21

回帖

45

积分

新手上路

积分
45
发表于 2014-6-18 10:37:35 | 显示全部楼层
我也有这个问题,你的解决了吗
回复

使用道具 举报

8

主题

21

回帖

45

积分

新手上路

积分
45
发表于 2014-6-18 10:38:00 | 显示全部楼层
我也有这个问题,你的解决了吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-6-18 10:47:40 | 显示全部楼层

回 czsczs 的帖子

czsczs:我也有这个问题,你的解决了吗 (2014-06-18 10:38) 
后面提高篇有一个专门的例子说多窗口的切换。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2014-7-2 09:49:59 | 显示全部楼层
晕 自己发了贴忘了结,不好意思。问题当天解决了,看代码。注意,我用的不是阻塞对话框。按下面的结构来弄是没问题的。
主任务
void MainTask1(void) {
  
WM_HWIN hItem;
GUI_Init();

     
    //GUI_CURSOR_Show();
  Create_Main_Window();
//CreateSystematic();
  while(1)
    {  
        
   GUI_Delay(1);
   switch(TZ)
   {   
     case 0x0001:
     {
     Open_KeyBoard();
     TZ=0x0000;
     }     
     break;
   
         case 0x0002:
    {

        Create_Main_Window();
        TZ=0x0000;
     }     
      break;
     
      case 0x0003:
    {

        CreateSystematic();
        TZ=0x0000;
     }     
      break;
  }  
   
  
  }
}


窗体1回调函数下图片点击响应跳转到窗体2:
      case ID_IMAGE_3: // Notifications sent by 'Button'
      switch(NCode) {

            case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
            {
                 TZ=0x0003;//调用建立窗体2函数 详细看MainTask.c文件
                 WM_DeleteWindow(pMsg->hWin);
            

            }
        break;
        }
     break;



窗体2回调函数下图片点击响应跳转到窗体1:
        
        case ID_IMAGE_0: // Notifications sent by 'Button'
      switch(NCode) {

            case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
            {
                 TZ=0x0002;//调用建立窗体1函数 详细看MainTask.c文件
                  WM_DeleteWindow(pMsg->hWin);
            }
        break;
        }
            break;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 21:26 , Processed in 0.334077 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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