硬汉嵌入式论坛

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

[emWin] 求救版主:emwin窗口转换时,死机

[复制链接]

2

主题

19

回帖

25

积分

新手上路

积分
25
发表于 2016-4-23 20:59:04 | 显示全部楼层 |阅读模式
我是emwin新手,碰到的问题:按下现有窗口上的开关,新开一窗口,按下新开窗口中的开关,又回到原窗口。
如此反复。但循环多几次(9次)就会停在新开窗口上,回不到原窗口,此时,按键上的颜色有变化。
已弄了两天,恳请版主帮忙,万分感谢!(附上程序)

#include "DIALOG.h"
#define ID_WINDOW_0  (GUI_ID_USER + 0x00)
#define ID_BUTTON_0  (GUI_ID_USER + 0x01)
#define ID_BUTTON_1  (GUI_ID_USER + 0x02)
static const GUI_WIDGET_CREATE_INFO _aDialogCreateSetup[] =
{
{ WINDOW_CreateIndirect, "Setup", 0, 0, 0, 800, 480, 0, 0x0, 0 },
  { BUTTON_CreateIndirect,   "Button",   ID_BUTTON_1, 700, 50, 70, 50, 0, 0x0, 0 },
};
///////////////////////////////////////////////////////////////////////////////////////
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 800, 480, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 327, 108, 107, 66, 0, 0x0, 0 },
};
///////////////////////////////////////////////////////////////////////////////////////
static void _cbDialogSetup(WM_MESSAGE * pMsg)
{
EDIT_Handle hEdit;
  WM_HWIN hItem;
  int     NCode;
  int     Id;
  switch (pMsg->MsgId)
{
  case WM_NOTIFY_PARENT:
  Id = WM_GetId(pMsg->hWinSrc);
  NCode = pMsg->Data.v;
    switch(Id)
  {
   case ID_BUTTON_1:

      switch(NCode)
   {
    case WM_NOTIFICATION_CLICKED:
     break;
     case WM_NOTIFICATION_RELEASED:
     WM_DeleteWindow(pMsg->hWin);
    break;
      }
      break;
  }
  break;
  
  default:
  WM_DefaultProc(pMsg);
    break;
  }
}
///////////////////////////////////////////////////////////////////////////////////////
static void _cbDialog(WM_MESSAGE * pMsg) {
  int NCode;
  int Id;
  switch (pMsg->MsgId) {
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_BUTTON_0:
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        break;
      case WM_NOTIFICATION_RELEASED:
      GUI_ExecDialogBox(_aDialogCreateSetup, GUI_COUNTOF(_aDialogCreateSetup),_cbDialogSetup, pMsg->hWin,0,0);
        break;
      }
      break;
    }
    break;
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}
///////////////////////////////////////////////////////////////////////////////////////
WM_HWIN Createttfdsp(void) {
  WM_HWIN hWin;
  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  return hWin;
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115711
QQ
发表于 2016-4-24 01:07:25 | 显示全部楼层
切不可在回调函数里面调用阻塞式的对话框  GUI_ExecDialogBox,每调用一次就会大量消耗任务栈空间,而且关闭后不会释放掉,
将其修改为非阻塞的  GUI_CreateDialogBox即可解决。
回复

使用道具 举报

2

主题

19

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2016-4-24 01:08:17 | 显示全部楼层
感谢版主施以援手,很感动!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115711
QQ
发表于 2016-4-24 01:15:21 | 显示全部楼层
测试数据贴在这个帖子里面了:http://www.armbbs.cn/forum.php?mod=viewthread&tid=18920
回复

使用道具 举报

2

主题

19

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2016-4-24 01:16:59 | 显示全部楼层

回 eric2013 的帖子

eric2013:切不可在回调函数里面调用阻塞式的对话框  GUI_ExecDialogBox,每调用一次就会大量效果栈控件,而且不会释放掉,
将其修改为非阻塞的  GUI_CreateDialogBox即可解决。 (2016-04-24 01:07)
万分感谢硬汉版主的帮助,真的很感谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 13:06 , Processed in 0.486392 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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