硬汉嵌入式论坛

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

[emWin] EMWIN对按键输入无反应

[复制链接]

1

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2015-3-15 19:41:22 | 显示全部楼层 |阅读模式
当按键输入时能够进入 ExecSetup(),可是屏幕没有刷新,使用模拟器能够刷新出新界面,请问问题在哪?谢谢

static void _cbDialog1(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
         WM_HWIN hWinSrc;
          char buf[50];
     WM_HWIN hWin = pMsg->hWin;
  int Id, NCode;
  // USER START (Optionally insert additional variables)
    GUI_UC_SetEncodeUTF8();  

  TEXT_SetFont(WM_GetDialogItem(hWin,ID_TEXT_0),&GUI_Fontsongfont36);

  // USER END

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    //
    // Initialization of 'Text'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
    TEXT_SetText(hItem, "电压:");
    TEXT_SetFont(hItem, GUI_FONT_16_HK);
    TEXT_SetTextColor(hItem, 0x0000FF00);
    //

  // USER START (Optionally insert additional message handling)

                        case WM_KEY:
      switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key) {
      case GUI_KEY_ESCAPE:
        GUI_EndDialog(hWin, 1);
        break;
      case GUI_KEY_UP:
        ExecSetup();//GUI_EndDialog(hWin, 0);
        break;
      }
      break;

    }
    break;
  // USER END
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}



// USER START (Optionally insert additional public code)
void MainTask(void)
{
        WM_SetCreateFlags(WM_CF_MEMDEV);
        GUI_Init();
  hWin_main = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), &_cbDialog1, WM_HBKWIN, 0, 0);

        while(1)
        {//GUI_ExecDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), &_cbDialog1, 0, 0, 0);
                GUI_Delay(1000);

        }
}
以下是ExecSetup的代码:

/*********************************************************************
*                SEGGER MICROCONTROLLER SYSTEME GmbH                 *
*        Solutions for real time microcontroller applications        *
**********************************************************************
*                                                                    *
*        (c) 1996 - 2003  SEGGER Microcontroller Systeme GmbH        *
*                                                                    *
*        Internet: www.segger.com    Support:  support@segger.com    *
*                                                                    *
**********************************************************************

**** emWin/GSC Grafical user interface for embedded applications ****
emWin is protected by international copyright laws. Knowledge of the
source code may not be used to write a similar product. This file may
only be used in accordance with a license and should not be re-
distributed in any way. We appreciate your understanding and fairness.
----------------------------------------------------------------------
File        : Setup.c
Purpose     : TBD
---------------------------END-OF-HEADER------------------------------
*/

#include <stddef.h>
#include "GUI.h"
#include "DIALOG.h"
//#include "Main.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
/*********************************************************************
*
*       Dialog IDs
*/
#define ID_FRAMEWIN              1
#define ID_WINDOW_0  (GUI_ID_USER + 0x00)
/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
static char    _IsInited;
static WM_HWIN _hDlg;
static WM_HWIN _hPrevWin;

static const GUI_WIDGET_CREATE_INFO _aDialogCreate_setup[] = {
  { FRAMEWIN_CreateIndirect, "Setup",   ID_WINDOW_0,     0, 320, 480, 320, 0},
  { CHECKBOX_CreateIndirect, NULL,      GUI_ID_CHECK0,  50,  40, 150,   0 },
  { CHECKBOX_CreateIndirect, NULL,      GUI_ID_CHECK1,  50,  70, 150,   0 },
  { CHECKBOX_CreateIndirect, NULL,      GUI_ID_CHECK2,  50, 100, 150,   0 },
  { TEXT_CreateIndirect,     "User ID:",0,              50, 130,  40,  20, TEXT_CF_LEFT | TEXT_CF_VCENTER },
  { EDIT_CreateIndirect,     NULL,      GUI_ID_EDIT0,   95, 130, 100,  20 },
  { BUTTON_CreateIndirect,   "OK",      GUI_ID_OK,     230, 140,  60,  20 },
  { BUTTON_CreateIndirect,   "CANCEL",      GUI_ID_CANCEL,     230, 180,  60,  20 },

};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _cbCallback
*/
static void _cbCallback(WM_MESSAGE * pMsg) {
  WM_HWIN hDlg, hWinSrc, hItem;
  int Id, NCode;
  hWinSrc = pMsg->hWinSrc;
  hDlg = pMsg->hWin;
  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    FRAMEWIN_SetFont(hDlg, &GUI_Font24B_ASCII);
    FRAMEWIN_SetTextAlign(hDlg, GUI_TA_HCENTER);
    FRAMEWIN_SetClientColor(hDlg, GUI_RED);
    hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK0); CHECKBOX_SetText(hItem, "Enable alarm");
    hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK1); CHECKBOX_SetText(hItem, "Enable display lighting");
    hItem = WM_GetDialogItem(hDlg, GUI_ID_CHECK2); CHECKBOX_SetText(hItem, "Enable color mode");
    break;
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(hWinSrc);      /* Id of widget */
    NCode = pMsg->Data.v;                 /* Notification code */
    if (NCode == WM_NOTIFICATION_RELEASED) {      /* React only if released */
      if (Id == GUI_ID_OK) {            /* OK Button */
        GUI_SetOrg(0, 0);
        WM_SetFocus(_hPrevWin);
      }
      else if (Id == GUI_ID_CANCEL) {            /* cancel Button */
        GUI_SetOrg(0, 0);
        WM_SetFocus(_hPrevWin);
      }
    }
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}

/*********************************************************************
*
*       _Init
*/
static void _Init(void) {
  if (_IsInited) {
    return;
  }
  _IsInited = 1;
  CHECKBOX_SetDefaultTextColor(GUI_WHITE);
  CHECKBOX_SetDefaultBkColor(GUI_INVALID_COLOR);
  CHECKBOX_SetDefaultFocusColor(GUI_WHITE);
  TEXT_SetDefaultTextColor(GUI_WHITE);
  _hDlg = GUI_CreateDialogBox(_aDialogCreate_setup, GUI_COUNTOF(_aDialogCreate_setup), &_cbCallback, 0, 0, 0);
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       ExecSetup
*/
void ExecSetup(void) {
  _hPrevWin = WM_GetFocussedWindow();
  _Init();
  GUI_SetOrg(0, 320);
  WM_SetFocus(_hDlg);
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115679
QQ
发表于 2015-3-15 22:58:32 | 显示全部楼层
使用外部按键操作emwin要以实际板子上面调试的为准,模拟上面能用是因为电脑版的已经设置好了,这部分使用emwin模拟是不行的,这个跟咱们使用外部按键是有区别的。
您可以参考下我们的这个例子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=5595   还有视频演示。支持全按键操作。
回复

使用道具 举报

1

主题

1

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2015-3-16 10:04:27 | 显示全部楼层
好的,谢谢,我研究一下
回复

使用道具 举报

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2015-3-16 10:22:28 | 显示全部楼层
按键部分的功能是需要自己写代码的。一般来说,

在中断程序或者主循环中检测按键,然后用API函数,发送按键消息。然后emwin就可以识别了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-11 17:57 , Processed in 0.226919 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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