硬汉嵌入式论坛

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

[emWin] STemWin5.48,GRAPH图形控件显示异常

[复制链接]

9

主题

39

回帖

66

积分

初级会员

积分
66
发表于 2024-1-7 22:42:14 | 显示全部楼层 |阅读模式
各位大神,最近在用emwin5.48的波形显示控件GRAPH时,波形无法显示,图形上显示像波浪的擦除动作,以为是波形颜色设置问题,更改多种颜色同样看不到波形,不知道哪个环节出了问题
贴出代码,请各位帮忙指点一二,感激不尽。


#include "DIALOG.h"
#include <stdlib.h>

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_GRAPH_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_0 (GUI_ID_USER + 0x03)


// 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, "Waveform", ID_FRAMEWIN_0, 0, 0, 480, 272, 0, 0x0, 0 },
  { GRAPH_CreateIndirect, "Graph", ID_GRAPH_0, 0, 0, 474, 254, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "close", ID_BUTTON_0, 431, 1, 40, 252, 0, 0x0, 0 },
  // USER START (Optionally insert additional widgets)
  // USER END
};

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

// USER START (Optionally insert additional static code)
GRAPH_DATA_Handle Graphdata;
unsigned int pBuffer;
// USER END

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

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    //
    // Initialization of 'Graph'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_GRAPH_0);
          Graphdata = GRAPH_DATA_YT_Create(GUI_GREEN, 300, (const short*)&pBuffer, 1);
    GRAPH_AttachData(hItem, Graphdata);
       
    GRAPH_SetBorder(hItem, 0, 0, 40, 0);
       
          GRAPH_SetColor(hItem, GUI_WHITE, GRAPH_CI_BK);
    GRAPH_SetColor(hItem, GUI_ORANGE, GRAPH_CI_GRID);
          GRAPH_SetGridDistX(hItem, 50);
          GRAPH_SetGridDistY(hItem, 50);
          GRAPH_SetLineStyleH(hItem, GUI_LS_DOT);
          GRAPH_SetLineStyleV(hItem, GUI_LS_DOT);
          GRAPH_SetGridVis(hItem, 3);
       
          hScaleV = GRAPH_SCALE_Create(15, GUI_TA_HCENTER | GUI_TA_LEFT,
                                       GRAPH_SCALE_CF_VERTICAL, 50);
          GRAPH_AttachScale(hItem, hScaleV);
          GRAPH_SCALE_SetFactor(hScaleV, 10);

    // 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 'close'
      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;
               
        case WM_PAINT:
                        GRAPH_DATA_YT_AddValue(Graphdata, pBuffer);       
          break;
  // USER START (Optionally insert additional message handling)
  // USER END
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateWaveform
*/
WM_HWIN CreateWaveform(void);
WM_HWIN CreateWaveform(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)
void TaskMenuGraph(void)
{
        static short int i = 300;
       
        i ++;
        if(i > 500)  i = 300;
        pBuffer = i;
  GRAPH_DATA_YT_AddValue(Graphdata, rand()%100);
}
// USER END


回复

使用道具 举报

9

主题

39

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2024-1-7 22:44:12 | 显示全部楼层
移植好后的emwin显示文本,图片,还有按钮之类其他控件都是正常的,感觉不像是底层没写好的原因
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106754
QQ
发表于 2024-1-8 09:49:27 | 显示全部楼层
ajianyes 发表于 2024-1-7 22:44
移植好后的emwin显示文本,图片,还有按钮之类其他控件都是正常的,感觉不像是底层没写好的原因

更新位置不对,Graph的更新不能在WM_PAINT消息里面
GRAPH_DATA_YT_AddValue(Graphdata, pBuffer);      
回复

使用道具 举报

9

主题

39

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2024-1-8 13:35:57 | 显示全部楼层
eric2013 发表于 2024-1-8 09:49
更新位置不对,Graph的更新不能在WM_PAINT消息里面
GRAPH_DATA_YT_AddValue(Graphdata, pBuffer);       ...

感谢硬汉哥回复,这个更新我单独用一个函数来TaskMenuGraph更新的。WM_PAINT是后面加上去的。是不是只需要用函数GRAPH_DATA_YT_AddValue(Graphdata, rand()%100)就可以实现波形显示

void TaskMenuGraph(void)
{
        static short int i = 300;
      
        i ++;
        if(i > 500)  i = 300;
        pBuffer = i;
  GRAPH_DATA_YT_AddValue(Graphdata, rand()%100);
}
回复

使用道具 举报

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2024-1-8 15:37:56 | 显示全部楼层
本帖最后由 caicaptain2 于 2024-1-8 15:40 编辑
ajianyes 发表于 2024-1-8 13:35
感谢硬汉哥回复,这个更新我单独用一个函数来TaskMenuGraph更新的。WM_PAINT是后面加上去的。是不是只需 ...

WM_PAINT消息里面,只能使用GUI_开头的画图函数,比如画个点,画个线,画个框框之类的,不要使用任何控件类的函数。

你可以在窗口的回调函数里面加上一个定时器,比如1秒钟的周期定时器,在窗口的定时器消息中(WM_TIMER) 中调用 GRAPH_DATA_YT_AddValue(Graphdata, pBuffer);      
就可以正常刷新这个控件了。
回复

使用道具 举报

9

主题

39

回帖

66

积分

初级会员

积分
66
 楼主| 发表于 2024-1-8 20:44:53 | 显示全部楼层
caicaptain2 发表于 2024-1-8 15:37
WM_PAINT消息里面,只能使用GUI_开头的画图函数,比如画个点,画个线,画个框框之类的,不要使用任何控件 ...

好的,非常感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 11:24 , Processed in 0.262490 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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