硬汉嵌入式论坛

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

[emWin] 关闭对话框还显示的疑惑

[复制链接]

1

主题

3

回帖

17

积分

新手上路

积分
17
发表于 2018-3-30 11:23:56 | 显示全部楼层 |阅读模式
对话框回调函数执行GUI_EndDialog后界面就不该显示对话框了吧?我用模拟器是可以的,关闭对话框后只显示背景窗口,但是我在IAR工程里面执行相同的代码对话框的内容还是显示?请教各位大佬,这是什么原因?小弟先拜谢了。


具体代码如下:
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_EDIT_0     (GUI_ID_USER + 0x01)
#define ID_EDIT_1     (GUI_ID_USER + 0x02)

#define WM_UPDATE (WM_USER + 0x00) /* 自定义消息 */

/*
*********************************************************************************************************
*                               GUI_WIDGET_CREATE_INFO类型数组
*********************************************************************************************************
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
        { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 160, 128, 0, 0x64, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_1, 38, 49, 81, 27, 0, 0x64, 0 },
};

/*
*********************************************************************************************************
*        函 数 名: _cbDialog
*        功能说明: 对话框回调函数               
*        形    参: pMsg  回调参数
*        返 回 值: 无
*********************************************************************************************************
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
        WM_HWIN hItem;
        int     NCode;
        int     Id;
        WM_HWIN hDlg;

        hDlg = pMsg->hWin;

        switch (pMsg->MsgId)
        {
                case WM_INIT_DIALOG:
                       
                        //
                        // 初始化框架窗口
                        //
                        hItem = pMsg->hWin;
                        FRAMEWIN_SetFont(hItem, GUI_FONT_32B_ASCII);
                        FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                        FRAMEWIN_SetText(hItem, "armfly");
               
                        //
                        // 初始化编辑框
                        //
                        //hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
                        //EDIT_SetText(hItem, "1024");
                        //EDIT_SetFont(hItem, GUI_FONT_24B_ASCII);
               
                        //
                        // 初始化编辑框
                        //
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
                        EDIT_SetText(hItem, "1024");
                        EDIT_SetFont(hItem, GUI_FONT_24B_ASCII);
                        EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);

                        EDIT_SetSel(hItem, 0, -1);  /* 设置选中编辑框中所有文本 */

                        break;
        case  WM_UPDATE:
                        hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
                                     EDIT_SetText(hItem, "1356");

          break;
                case WM_KEY:
                       switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
                       {
                        case GUI_KEY_ESCAPE:
                             GUI_EndDialog(hDlg, 1);
                             break;

                        case GUI_KEY_ENTER:

                             GUI_EndDialog(hDlg, 0);
                             break;
                       }

                  break;
                case WM_NOTIFY_PARENT:
                        Id    = WM_GetId(pMsg->hWinSrc);
                        NCode = pMsg->Data.v;
                        switch(Id)
                        {
                                case ID_EDIT_0:
                                        switch(NCode)
                                        {
                                                case WM_NOTIFICATION_CLICKED:
                                                        break;
                                               
                                                case WM_NOTIFICATION_RELEASED:
                                                        break;
                                               
                                                case WM_NOTIFICATION_VALUE_CHANGED:
                                                        break;
                                        }
                                        break;
                                       
                                case ID_EDIT_1:
                                        switch(NCode)
                                        {
                                                case WM_NOTIFICATION_CLICKED:
                                                        break;
                                               
                                                case WM_NOTIFICATION_RELEASED:
                                                        break;
                                               
                                                case WM_NOTIFICATION_VALUE_CHANGED:
                                                        break;
                                        }
                                        break;
                        }
                        break;
              case WM_PAINT:
                      // PaintWin(pMsg);
              break;

                default:
                        WM_DefaultProc(pMsg);
                        break;
        }
}


/*********************************************************************
*
*       _cbBkWindow
*/
static void _cbBkWindow(WM_MESSAGE * pMsg)
{
  //unsigned i;
  switch (pMsg->MsgId)
  {
  case WM_PAINT:
    GUI_SetBkColor(GUI_BLUE);
    GUI_Clear();
    GUI_SetColor(GUI_WHITE);
    GUI_SetFont(&GUI_Font24_ASCII);
    GUI_DispStringHCenterAt("Counting Sample", 80, 5);

    break;
    default:
    WM_DefaultProc(pMsg);
    }


}

void MainTask(void)
{
     WM_SetCreateFlags(WM_CF_MEMDEV);  // Use memory devices on all windows to avoid flicker
    GUI_Init();
  //
  // Check if recommended memory for the sample is available
  //
  if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
    GUI_ErrorOut("Not enough memory available.");
    return;
  }

  WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
  GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, 0, 0, 0);

  while(1)
  {
               WM_Exec();
                GUI_Exec();
            //GUI_Delay(1000);
                GUI_SendKeyMsg(GUI_KEY_ENTER,1); /*直接发消息关闭对话框*/
  }
}


St 实际显示结果

St 实际显示结果

模拟器显示结果

模拟器显示结果
回复

使用道具 举报

1

主题

3

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2018-3-30 11:36:09 | 显示全部楼层
自己先顶一个,希望高手能指点迷津!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-3-30 14:15:09 | 显示全部楼层
帮你在我们的板子上面测试下,你这个程序没问题的

4.gif
回复

使用道具 举报

1

主题

3

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2018-3-30 14:48:03 | 显示全部楼层
eric2013 发表于 2018-3-30 14:15
帮你在我们的板子上面测试下,你这个程序没问题的

谢谢硬汉,不知道是不是移植不正常导致的。如果使用SysTick_Handler中断,OS_TimeMS变量加到某个值就不再进入中断了。所以我就不用GUI_Delay,直接调用GUI_Exec刷新界面。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-3-30 17:52:47 | 显示全部楼层
冯超 发表于 2018-3-30 14:48
谢谢硬汉,不知道是不是移植不正常导致的。如果使用SysTick_Handler中断,OS_TimeMS变量加到某个值就不再 ...

估计是你移植的程序模板有问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 11:51 , Processed in 0.346369 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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