硬汉嵌入式论坛

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

[emWin] 关于EDIT的刷新问题

[复制链接]

5

主题

15

回帖

30

积分

新手上路

积分
30
发表于 2016-3-22 14:45:25 | 显示全部楼层 |阅读模式
我写了一段代码如下:

static void _cbBkChildWindos(WM_MESSAGE * pMsg)
{
    WM_HWIN hDlg;
  uint8_t i;
    uint16_t EditX,EditY,EditX_Size,EditY_Size;
    int           NCode;
  int           Id;
   
  hDlg = pMsg->hWin;
    switch (pMsg->MsgId) {
  case WM_PAINT:
    GUI_SetBkColor(GUI_LIGHTSKYBLUE);
        GUI_Clear();
    _cbSetMeasureDispFrameMain(hDlg);
    break;
    case WM_CREATE:
    /*°′¼ü*/
    SetMea.hButton[4] = BUTTON_CreateEx(Button0_X,Button0_Y,Button0_X_Size,Button0_Y_Size,pMsg->hWin, WM_CF_SHOW,0,GUI_ID_USER_BUTTON4);
    BUTTON_SetText(SetMea.hButton[4],"Ñ¡Ôñ");
    SetMea.hButton[5] = BUTTON_CreateEx(Button1_X,Button1_Y,Button1_X_Size,Button1_Y_Size,pMsg->hWin, WM_CF_SHOW,0,GUI_ID_USER_BUTTON5);
    BUTTON_SetText(SetMea.hButton[5],"±à¼-");
    SetMea.hButton[6] = BUTTON_CreateEx(Button2_X,Button2_Y,Button2_X_Size,Button2_Y_Size,pMsg->hWin, WM_CF_SHOW,0,GUI_ID_USER_BUTTON6);
    BUTTON_SetText(SetMea.hButton[6],"éÏμ÷");
    SetMea.hButton[7] = BUTTON_CreateEx(Button3_X,Button3_Y,Button3_X_Size,Button3_Y_Size,pMsg->hWin, WM_CF_SHOW,0,GUI_ID_USER_BUTTON7);
    BUTTON_SetText(SetMea.hButton[7],"ÏÂμ÷");   
   
    /*ÏÂà-áD±í¿ò*/
    SetMea.hDropDown[0] = DROPDOWN_CreateEx(20 + RectLength/2 - 150/2,40 + 1,150,28,pMsg->hWin,WM_CF_SHOW,DROPDOWN_CF_AUTOSCROLLBAR,GUI_ID_USER_DROPDOWN0);
    DROPDOWN_SetFont(SetMea.hDropDown[0],&GUI_FontHZSongti24);
    for(i=0;i<10;i++)
    DROPDOWN_AddString(SetMea.hDropDown[0],MeasureName);
    DROPDOWN_SetTextAlign(SetMea.hDropDown[0],TEXT_CF_HCENTER|TEXT_CF_VCENTER);
    for(i=0;i<3;i++)
    SetMea.hDropDown[1+i] = DROPDOWN_CreateEx(160,310 + 30*i,80,35,pMsg->hWin,WM_CF_SHOW,DROPDOWN_CF_AUTOSCROLLBAR,GUI_ID_USER_DROPDOWN1+i);
   
    /*Îı¾¿ò*/
    for(i=0;i<8;i++){
    switch(i){
        case 0:
            EditX = 100;
            EditY = 85;
          EditX_Size = 80;
            EditY_Size = 17;
            break;
        case 1:
            EditX = 200;
            EditY = 107;
          EditX_Size = 80;
            EditY_Size = 17;
            break;
        case 2:
            EditX = 300;
            EditY = 185;
          EditX_Size = 80;
            EditY_Size = 17;
            break;
        case 3:
            EditX = 400;
            EditY = 207;
          EditX_Size = 80;
            EditY_Size = 17;
            break;
        case 4:
            EditX = 160;
            EditY = 250;
          EditX_Size = 80;
            EditY_Size = 17;
            break;
        case 5:
            EditX = 160;
            EditY = 280;
          EditX_Size = 80;
            EditY_Size = 17;
            break;
        case 6:
            EditX = 360;
            EditY = 250;
          EditX_Size = 100;
            EditY_Size = 17;
            break;
        case 7:
            EditX = 360;
            EditY = 280;
          EditX_Size = 100;
            EditY_Size = 17;
            break;
    }   
    SetMea.hEdit = EDIT_CreateEx(EditX,EditY,EditX_Size,EditY_Size,pMsg->hWin,WM_CF_SHOW,0,GUI_ID_USER_EDIT0+i,6);
    WIDGET_SetEffect(SetMea.hEdit,&WIDGET_Effect_None);
    EDIT_SetFloatMode(SetMea.hEdit,0,-5,5,3,GUI_EDIT_SIGNED);
    }
    EDIT_SetFloatValue(SetMea.hEdit[0],MeasureDispFrame.Measure[Me2.MeasureListNum - 1].MinTolValue);
    EDIT_SetFloatValue(SetMea.hEdit[1],MeasureDispFrame.Measure[Me2.MeasureListNum - 1].MinWarningValue);
    EDIT_SetFloatValue(SetMea.hEdit[2],MeasureDispFrame.Measure[Me2.MeasureListNum - 1].MaxWarningValue);
    EDIT_SetFloatValue(SetMea.hEdit[3],MeasureDispFrame.Measure[Me2.MeasureListNum - 1].MaxTolValue);
    EDIT_SetFloatValue(SetMea.hEdit[4],MeasureDispFrame.Measure[Me2.MeasureListNum - 1].StaOffsetValue);
    EDIT_SetFloatValue(SetMea.hEdit[5],MeasureDispFrame.Measure[Me2.MeasureListNum - 1].NominalValue);
  break;        
    case WM_KEY:
        switch(((WM_KEY_INFO*)(pMsg->Data.p))->Key){
            case KEYFUC_ESC:
                MeasureFrame.DispSetFlag = 0;
              WM_SetFocus(WM_GetParent(pMsg->hWin));
                WM_DeleteWindow(pMsg->hWin);
              
                break;
            
        }
    break;
    case WM_TIMER:
        WM_RestartTimer(pMsg->Data.v,10);
        WM_InvalidateWindow(pMsg->hWin);
    break;
  default:
    WM_DefaultProc(pMsg);
  }
}
预想的效果应该是下拉栏、按键、编辑小工具都是一起刷新出来的,但实际效果是编辑小工具首先出现在屏幕上,然后其他的才刷新出来,搞不清楚是怎么回事,请大神帮忙看看,谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107352
QQ
发表于 2016-3-22 21:58:36 | 显示全部楼层
这种情况好像以前有人问过。
1. 查看是不是emWin动态内存小了
2. 如果使用了RTOS是不是任务栈小了。
3. 把WM_CREATE创建方式改成资源列表的创建方式是不是好用。
4. 查下是不是都成优化有问题。

暂时想到这么四条。
回复

使用道具 举报

5

主题

15

回帖

30

积分

新手上路

积分
30
 楼主| 发表于 2016-3-23 08:54:02 | 显示全部楼层

回 eric2013 的帖子

eric2013:这种情况好像以前有人问过。
1. 查看是不是emWin动态内存小了
2. 如果使用了RTOS是不是任务栈小了。
3. 把WM_CREATE创建方式改成资源列表的创建方式是不是好用。
4. 查下是不是都成优化有问题。
....... (2016-03-22 21:58) 
你好,谢谢回答。
关于1,动态内存我设置的很大了还是一样
2,没有使用
3,之前就是用资源列表形式不同步刷新才用的这种
4,没明白都成优化是什么意思。
我搜索了相似问题没有找到有人问过这个问题啊?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107352
QQ
发表于 2016-3-23 10:18:07 | 显示全部楼层

回 gugugui 的帖子

gugugui:你好,谢谢回答。
关于1,动态内存我设置的很大了还是一样
2,没有使用
3,之前就是用资源列表形式不同步刷新才用的这种
....... (2016-03-23 08:54) 

4. 底层优化是不是有问题。

正常情况下下,就算刷新比较慢,也应该是从上往下进行刷新,你的底层是用的通用移植方式吗,如果是的话,就把底层优化全部关闭,仅实现打点函数,看看效果。

还有就是你用的什么屏,屏的板子之间是杜邦线连接不。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-28 06:05 , Processed in 0.166260 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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