OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3858|回复: 5

emwin 删除所有窗口遇到的问题

[复制链接]

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2018-8-23
在线时间
43 小时
发表于 2019-3-29 23:52:53 | 显示全部楼层 |阅读模式
1金钱
背景:最近在用emwin做项目  因为时间紧也就没有仔细学习emwin,对emwin的窗口管理机制,各种回调函数不是很了解。

开发板:阿波罗F767

问题:我想在摄像头拍照的例程上,加上emwin的界面用于设置摄像头参数等作用。具体做法是开始时
  1.建立设置界面任务,但立马挂起。
  2.初始化摄像头,立即开启传输。
  3. 按下按键Key1后先关闭摄像头传输,再恢复emwin界面的任务。
  4.在emwin主界面按下“退出”按钮后先挂起emwin任务,再恢复摄像头的传输。
  现在有时能恢复摄像头的传输,有时在主界面下按了“退出”之后画面保留主界面的内容,没有摄像头的画面,但此时并未卡死,再按下Key1进入设置界面还能正常工作。
  后续的测试发现再挂起emwin的任务后,用LCD屏的驱动函数直接把屏幕刷黑都失败了,难道说emwin占据了屏幕的资源导致直接用LCD驱动函数都不起作用了?

有没有熟悉emwin的大神解释一下   

因为怀疑是缺少售卖回调函数,下面放上主界面的C文件:

// USER START (Optionally insert additional includes)
// USER END
#include "app.h"
#include "DIALOG.h"
#include "FramewinDLG.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_BUTTON_2 (GUI_ID_USER + 0x03)
#define ID_BUTTON_3 (GUI_ID_USER + 0x04)
#define ID_BUTTON_4 (GUI_ID_USER + 0x05)
#define ID_BUTTON_5 (GUI_ID_USER + 0x06)


// USER START (Optionally insert additional defines)
// USER END

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

// USER START (Optionally insert additional static data)
// USER END

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 480, 272, 0, 0x64, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 80, 15, 120, 60, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 80, 90, 120, 60, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 80, 165, 120, 60, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_3, 280, 15, 120, 60, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_4, 280, 90, 120, 60, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_5, 280, 165, 120, 60, 0, 0x0, 0 },
  // USER START (Optionally insert additional widgets)
  // USER END
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/

// USER START (Optionally insert additional static code)
// USER END

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  int     NCode;
  int     Id;
  // USER START (Optionally insert additional variables)
  // USER END

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    //
    // Initialization of 'Framewin'
    //
    hItem = pMsg->hWin;
    FRAMEWIN_SetTitleHeight(hItem, 30);
    FRAMEWIN_SetFont(hItem, GUI_FONT_16B_ASCII);
    FRAMEWIN_SetText(hItem, "Options");
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetText(hItem, "1-Set Time");
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetText(hItem, "2-Color Error");
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    BUTTON_SetText(hItem, "3-SD Card");
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
    BUTTON_SetText(hItem, "4-Yesterday Stati ");
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4);
    BUTTON_SetText(hItem, "5-Study Mode");
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5);
    BUTTON_SetText(hItem, "6-Exit");
    // USER START (Optionally insert additional code for further widget initialization)
    // USER END
    break;
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_BUTTON_0: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                WM_HideWindow(hPage[0]);        //隐藏主界面
                WM_ShowWindow(hPage[1]);        //显示设置时间界面
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    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
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                WM_HideWindow(hPage[0]);        //隐藏主界面
                WM_ShowWindow(hPage[2]);        //显示颜色时间界面
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_BUTTON_2: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                WM_HideWindow(hPage[0]);        //隐藏主界面
                WM_ShowWindow(hPage[3]);        //显示SD卡使用界面
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_BUTTON_3: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                WM_HideWindow(hPage[0]);        //隐藏主界面
                WM_ShowWindow(hPage[4]);        //显示昨日统计界面
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_BUTTON_4: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_BUTTON_5: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
                myOptions.optionUI = 0;                //推出UI界面
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    // USER START (Optionally insert additional code for further Ids)
    // USER END
    }
    break;
  // USER START (Optionally insert additional message handling)
  // USER END
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateFramewin
*/
WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void) {
  WM_HWIN hWin;

  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  return hWin;
}

// USER START (Optionally insert additional public code)
// USER END

/*************************** End of file ****************************/

最佳答案

查看完整内容[请看2#楼]

参考下这个帖子:http://www.openedv.com/forum.php?mod=viewthread&tid=288603
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14287
金钱
14287
注册时间
2018-8-3
在线时间
1147 小时
发表于 2019-3-29 23:52:54 | 显示全部楼层
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2018-8-23
在线时间
43 小时
 楼主| 发表于 2019-3-31 20:28:53 | 显示全部楼层
这个帖子应该是将摄像头加入到了emwind的界面当中,确实是一个不错的方法。我的思路是使用摄像头时关闭emwin的显示,关闭了摄像头再打开emwin。不过看来摄像头的程序和emwin底层可能有一些冲突。我决定试试那位仁兄的方法,谢谢了。
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2018-8-23
在线时间
43 小时
 楼主| 发表于 2019-3-31 23:06:41 | 显示全部楼层
其实我的问题是 能不能在emwin显示时让emwin停止运行一下,让我自己在屏幕上显示一些东西。然后再打开emwin恢复运行。
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2018-8-23
在线时间
43 小时
 楼主| 发表于 2019-4-1 00:04:44 | 显示全部楼层
顺带问一下  使用emwin之后再用RGBL屏的驱动函数比如LCD_ShowString()就不灵了   这是售卖原因呢
回复

使用道具 举报

2

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
171
金钱
171
注册时间
2018-8-23
在线时间
43 小时
 楼主| 发表于 2019-4-1 00:06:07 | 显示全部楼层
顺带问一下  使用emwin之后再用RGB屏的驱动函数比如LCD_ShowString()就不灵了, 这是怎么回事呢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 23:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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