硬汉嵌入式论坛

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

[emWin] 如何在button按下后更新页面内容

[复制链接]

2

主题

10

回帖

2

积分

新手上路

积分
2
发表于 2014-9-25 23:48:45 | 显示全部楼层 |阅读模式
今天准备熟悉下emwin的基本API。
如附图所示,已经创建了一个带三个button的window, 准备在Home button按下时更新下页面的信息,发现页面没有反应, 还是跟初始化的页面一样。代码如下。
请问是什么原因导致的?

case ID_BUTTON_0: // Notifications sent by 'Home'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        GUI_SetFont(&GUI_Font8x16);
        GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();
        GUI_SetPenSize(10);
        GUI_SetColor(GUI_RED);
        GUI_DrawLine(80, 10, 240, 90);
        GUI_DrawLine(80, 90, 240, 10);
        GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
        GUI_SetTextMode(GUI_TM_NORMAL);
        GUI_DispStringHCenterAt("GUI_TM_NORMAL" , 50, 40);
        GUI_SetColor(GUI_RED);
        GUI_GotoXY(100,100);
        GUI_DispString("Hello world"); //Disp text
        // USER END
        break;
QQ截图20140925234812.jpg
回复

使用道具 举报

2

主题

10

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2014-9-25 23:49:10 | 显示全部楼层
/*********************************************************************
*                                                                    *
*                SEGGER Microcontroller GmbH & Co. KG                *
*        Solutions for real time microcontroller applications        *
*                                                                    *
**********************************************************************
*                                                                    *
* C-file generated by:                                               *
*                                                                    *
*        GUI_Builder for emWin version 5.22                          *
*        Compiled Jul  4 2013, 15:16:01                              *
*        (c) 2013 Segger Microcontroller GmbH & Co. KG               *
*                                                                    *
**********************************************************************
*                                                                    *
*        Internet: www.segger.com  Support: support@segger.com       *
*                                                                    *
**********************************************************************
*/

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

#include "DIALOG.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_WINDOW_0             (GUI_ID_USER + 0x00)
#define ID_BUTTON_0             (GUI_ID_USER + 0x0C)
#define ID_BUTTON_1             (GUI_ID_USER + 0x0E)
#define ID_BUTTON_2             (GUI_ID_USER + 0x0F)
#define ID_TEXT_0             (GUI_ID_USER + 0x11)


// 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[] = {
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 240, 320, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Home", ID_BUTTON_0, 0, 290, 80, 30, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Setting", ID_BUTTON_1, 160, 290, 80, 30, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Control", ID_BUTTON_2, 80, 290, 80, 30, 0, 0x0, 0 },
  { TEXT_CreateIndirect, "Wireless Control System ", ID_TEXT_0, 0, 0, 240, 30, 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 'Window'
    //
    hItem = pMsg->hWin;
    WINDOW_SetBkColor(hItem, 0x00FD91A0);
    //
    // Initialization of 'Home'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetFont(hItem, GUI_FONT_16_ASCII);
    //
    // Initialization of 'Setting'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetFont(hItem, GUI_FONT_16_ASCII);
    //
    // Initialization of 'Control'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
    BUTTON_SetFont(hItem, GUI_FONT_16_ASCII);
    //
    // Initialization of 'Wireless Control System '
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
    TEXT_SetFont(hItem, GUI_FONT_20_ASCII);
    TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    // 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 'Home'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        GUI_SetFont(&GUI_Font8x16);
        GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();
        GUI_SetPenSize(10);
        GUI_SetColor(GUI_RED);
        GUI_DrawLine(80, 10, 240, 90);
        GUI_DrawLine(80, 90, 240, 10);
        GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
        GUI_SetTextMode(GUI_TM_NORMAL);
        GUI_DispStringHCenterAt("GUI_TM_NORMAL" , 50, 40);
        GUI_SetColor(GUI_RED);
        GUI_GotoXY(100,100);
        GUI_DispString("Hello world"); //Disp text
        // 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_1: // Notifications sent by 'Setting'
      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_2: // Notifications sent by 'Control'
      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;
    // 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
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateWindow
*/
WM_HWIN CreateWindow(void);
WM_HWIN CreateWindow(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

主题

10

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2014-10-5 15:44:10 | 显示全部楼层
顶一个, 没人遇到类似的问题吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-10-7 09:43:20 | 显示全部楼层
楼主应该没有看过我写的那个emWin 60期教程,GUIBulder生成相应代码后,还加上一个下面的死循环。
延迟函数会调用相应的控件刷新。
while(1)
{
  GUI_Delay(100);

}
回复

使用道具 举报

2

主题

10

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2014-10-8 20:53:09 | 显示全部楼层

回 eric2013 的帖子

eric2013:楼主应该没有看过我写的那个emWin 60期教程,GUIBulder生成相应代码后,还加上一个下面的死循环。
延迟函数会调用相应的控件刷新。
while(1)
{
  GUI_Delay(100);
....... (2014-10-07 09:43) 
有加啊,代码如下
static void Demo_Task(void * pvParameters)
{
    /* Start Demo */
    CreateWindow();
    while(1)
    {
        GUI_Delay(100);
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2014-10-9 10:05:09 | 显示全部楼层
这些函数不能在按钮下更新,得在WM_PAINT消息下更新:

GUI_SetFont(&GUI_Font8x16);
        GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();
        GUI_SetPenSize(10);
        GUI_SetColor(GUI_RED);
        GUI_DrawLine(80, 10, 240, 90);
        GUI_DrawLine(80, 90, 240, 10);
        GUI_SetBkColor(GUI_BLACK);
        GUI_SetColor(GUI_WHITE);
        GUI_SetTextMode(GUI_TM_NORMAL);
        GUI_DispStringHCenterAt("GUI_TM_NORMAL" , 50, 40);
        GUI_SetColor(GUI_RED);
        GUI_GotoXY(100,100);
        GUI_DispString("Hello world"); //Disp text


建议在按钮的按下消息中将窗口无效,从而使能WM_PAINT消息的执行即可。
回复

使用道具 举报

2

主题

10

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2014-10-12 19:50:54 | 显示全部楼层

回 eric2013 的帖子

eric2013:这些函数不能在按钮下更新,得在WM_PAINT消息下更新:

GUI_SetFont(&GUI_Font8x16);
        GUI_SetBkColor(GUI_BLUE);
        GUI_Clear();
....... (2014-10-09 10:05) 
非常感谢,按你的方法终于可以刷新了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 12:02 , Processed in 0.248560 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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