硬汉嵌入式论坛

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

[emWin] 关于窗口的BUTTON问题

[复制链接]

8

主题

26

回帖

50

积分

初级会员

积分
50
发表于 2016-1-29 14:15:45 | 显示全部楼层 |阅读模式
static void _DrawWindow3(WM_HWIN hWindows3)
{
    WM_HWIN hItem ;
   
     hItem = TEXT_CreateEx(0, 0, 180, 70, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_0,TEXT_CF_LEFT, "工艺设置");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     TEXT_SetBkColor(hItem,0x800080);
         
     hItem = EDIT_CreateEx(0, 450, 360, 30, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_0, 10);
     EDIT_SetText(hItem, "");
     EDIT_SetFont(hItem,  &GUI_FontYahei);
     EDIT_SetBkColor(hItem,1,GUI_GRAY);
              
     hItem = EDIT_CreateEx(360, 450, 200, 30, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_1, 10);
     EDIT_SetText(hItem, "");
     EDIT_SetFont(hItem,  &GUI_FontYahei);
     EDIT_SetBkColor(hItem,1,GUI_GRAY);
      
     hItem = EDIT_CreateEx(560, 450, 120, 30, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_2, 10);
     EDIT_SetText(hItem, "软件版本");
     EDIT_SetFont(hItem,  &GUI_FontYahei);
     EDIT_SetBkColor(hItem,1,GUI_GRAY);
         
     hItem = EDIT_CreateEx(680, 450, 120, 30, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_3, 10);
     EDIT_SetText(hItem, "1.0");
     EDIT_SetFont(hItem,  &GUI_FontYahei);
     EDIT_SetBkColor(hItem,1,GUI_GRAY);   
     
//line--1
     hItem = TEXT_CreateEx(0, 82, 180, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_1,TEXT_CF_LEFT, "加捻方向");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     
     hItem = EDIT_CreateEx(180, 82, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_4, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);         
     
     hItem = TEXT_CreateEx(420, 82, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_2,TEXT_CF_LEFT, "纱线支数");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);     
     
   hItem = BUTTON_CreateEx(540, 82, 60, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_BUTTON3_0);
     BUTTON_SetText(hItem, "公制");   
     BUTTON_SetFont(hItem,    &GUI_FontYahei);         
     
     hItem = EDIT_CreateEx(600, 82, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_5, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   

//line2
     hItem = TEXT_CreateEx(0, 134, 180, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_3,TEXT_CF_LEFT, "捻度");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     
     hItem = EDIT_CreateEx(180, 134, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_6, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   
     
     hItem = TEXT_CreateEx(300, 134, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_4,TEXT_CF_LEFT, "T/m");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);     
     
     hItem = TEXT_CreateEx(420, 134, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_5,TEXT_CF_LEFT, "纱线定长");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);   

     hItem = EDIT_CreateEx(600, 134, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_7, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   
     
     hItem = TEXT_CreateEx(720, 134, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_6,TEXT_CF_LEFT, "m");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);     
     
//line3
     hItem = TEXT_CreateEx(0, 186, 180, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_7,TEXT_CF_LEFT, "锭速");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     
     hItem = EDIT_CreateEx(180, 186, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_8, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   

     hItem = TEXT_CreateEx(300, 186, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_8,TEXT_CF_LEFT, "r/min");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);   
     
     hItem = TEXT_CreateEx(420, 186, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_9,TEXT_CF_LEFT, "长度修正系数");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);   
     
     hItem = EDIT_CreateEx(600, 186, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_9, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   
     
//line4
     hItem = TEXT_CreateEx(0, 238, 180, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_10,TEXT_CF_LEFT, "卷绕速度");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     
     hItem = EDIT_CreateEx(180, 238, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_10, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   
     
     hItem = TEXT_CreateEx(300, 238, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_11,TEXT_CF_LEFT, "r/min");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);     
     
     hItem = TEXT_CreateEx(420, 238, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_12,TEXT_CF_LEFT, "整车锭数");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);         
     
     hItem = EDIT_CreateEx(600, 238, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_11, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);         
     
//line5
     hItem = TEXT_CreateEx(0, 290, 180, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_13,TEXT_CF_LEFT, "卷绕电机频率");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);

     hItem = EDIT_CreateEx(180, 290, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_12, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   
     
     hItem = TEXT_CreateEx(300, 290, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_14,TEXT_CF_LEFT, "Hz");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);     
     
     hItem = TEXT_CreateEx(420, 290, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_15,TEXT_CF_LEFT, "纱筒重量");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);         
     
     hItem = EDIT_CreateEx(600, 290, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_13, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);         
     
     hItem = TEXT_CreateEx(720, 290, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_16,TEXT_CF_LEFT, "kg");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);

//line6
     hItem = TEXT_CreateEx(0, 342, 180, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_17,TEXT_CF_LEFT, "加捻电机频率");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);

     hItem = EDIT_CreateEx(180, 342, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_14, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);   
     
     hItem = TEXT_CreateEx(300, 342, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_18,TEXT_CF_LEFT, "Hz");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);     

     hItem = TEXT_CreateEx(420, 342, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_19,TEXT_CF_LEFT, "台产量");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);        

     hItem = EDIT_CreateEx(600, 342, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_EDIT3_15, 10);
     EDIT_SetFont(hItem,  &GUI_FontYahei);         
         
     hItem = TEXT_CreateEx(720, 342, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_20,TEXT_CF_LEFT, "kg/h");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     
//line7
     hItem = TEXT_CreateEx(0, 394, 180, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_21,TEXT_CF_LEFT, "任务完成后关机");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     
     hItem = TEXT_CreateEx(180, 394, 120, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV,  ID_TEXT3_22,TEXT_CF_LEFT, "关闭");   
     TEXT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
     TEXT_SetFont(hItem, &GUI_FontYahei);
     
   hItem = BUTTON_CreateEx(300, 394, 60, 40, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_BUTTON3_1);
     BUTTON_SetText(hItem, "设置");   
     BUTTON_SetFont(hItem,    &GUI_FontYahei);              
     
//button
   hItem = BUTTON_CreateEx(350, 10, 150, 50, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_BUTTON3_2);
     BUTTON_SetText(hItem, "导纱机构设置");   
     BUTTON_SetFont(hItem,    &GUI_FontYahei);         
     
   hItem = BUTTON_CreateEx(600, 10, 120, 50, hWindows3, WM_CF_SHOW|WM_CF_MEMDEV, 0, ID_BUTTON3_3);
     BUTTON_SetText(hItem, "返回");   
     BUTTON_SetFont(hItem,    &GUI_FontYahei);            
     
}

static void _cbWindow3(WM_MESSAGE* pMsg)
{

    WM_HWIN hItem = pMsg->hWin;
   
    switch (pMsg->MsgId)
    {
        
        case WM_CREATE:
            /* 创建后设置聚焦 */
    //        WM_SetFocus(hItem);
            break;
        case WM_KEY:
            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
            {
                case GUI_KEY_ESCAPE:
                    GUI_EndDialog(hItem, 1);
                    break;
                case GUI_KEY_TAB:
                    WM_SetFocusOnNextChild(hItem);
                    break;
            }
            break;
        case WM_PAINT:
            {
                GUI_RECT r;
                WM_GetClientRect(&r);
                GUI_SetBkColor(GUI_LIGHTGRAY);
                GUI_Clear();
                _DrawUpRectEx(&WIDGET_Effect_3D2L, &r);
                _DrawWindow3(pMsg->hWin);               
               
            }
            break;
        case WM_NOTIFY_PARENT:
            if (pMsg->Data.v == WM_NOTIFICATION_RELEASED)
            {
                int Id = WM_GetId(pMsg->hWinSrc);
                switch (Id)
                {
                case ID_BUTTON3_0:
               
                        break;
                    case ID_BUTTON3_1:  //关闭
   
                        break;
                    case ID_EDIT3_2:   
                        break;
                    case ID_BUTTON3_3:  //返回
            
                    break;
                        
            }
        }
        break;
        default:
            WM_DefaultProc(pMsg);
    }
}



WM_HWIN CreateWindow3(void)
{
  
     hWin =WM_CreateWindow(0, 0, 800, 480, WM_CF_SHOW|WM_CF_MEMDEV, _cbWindow3, 0);
     
  return hWin;
}


    while(1){
        GUI_Delay(50);
        ii++;
        if(ii>=1000) ii=0;

               for(iii=ID_EDIT3_4;iii<ID_EDIT3_4+12;iii++)
        {
                hMulti = WM_GetDialogItem(WM_GetClientWindow(hWin), iii);
            EDIT_SetFloatMode(hMulti,ii,0,1000,0,GUI_EDIT_SUPPRESS_LEADING_ZEROES);
        }

            
   }
}
上面的这个例子我操作的时候,点解任何一个ID_BUTTON3_1的时候,会出现一个现象导致EDIT里面的值都不显示了。是什么原因。
回复

使用道具 举报

8

主题

26

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2016-1-29 15:39:16 | 显示全部楼层
我测试了一下,感觉是我点击了ID_BUTTON3_1,包括任何一个BUTTON,都好像会使得这个窗口重绘导致的这个现象。
回复

使用道具 举报

8

主题

26

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2016-1-29 15:52:19 | 显示全部楼层
但是如果我把_DrawWindow3这个函数不要放置在回调函数里面,就不会出现这个现象,但是不放在里面的话,比如我创造了两个窗口 都用这样的方式创建的,切换的时候使用    WM_DeleteWindow(hWin);和WM_CreateWindow();就发现切换界面比较慢,用隐藏和显示,我试过了的方法应该不对,出现问题,请指教一下这个问题怎么处理。
回复

使用道具 举报

8

主题

26

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2016-1-29 17:04:48 | 显示全部楼层
因为我的窗口控件特别多,界面切换的时候就会出现一点点卡的现象。
回复

使用道具 举报

8

主题

26

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2016-1-29 17:08:36 | 显示全部楼层
把画控件的放到WM_PAINT的话,就发现界面切换的时候显示没有卡的现象,但会存在BUTTON导致EDIT无法显示现象,但如果把画控件的函数放到WM_CREATE,就会有界面切换的时候卡的现象,但BUTTON这个导致EDIT无法显示的现象就不存在了,我猜测是点击BUTTON导致窗口没有删除又重绘了导致的。不知道有没有办法解决,或者有什么方法可以实现两个窗口切换没有卡的现象 我的控件稍微有点多。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2016-1-29 17:14:59 | 显示全部楼层
这个函数放错位置了,要放在WM_CREATE里面:       _DrawWindow3(pMsg->hWin);   

另外建议用资源列表创建,单独麻烦且不容易管理。
回复

使用道具 举报

8

主题

26

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2016-1-29 17:40:02 | 显示全部楼层
确实是的 放在WM_CREATE这个里面就不会这样了,但有另外一个问题就是比如我两个窗口切换的时候,就会有卡的现象。不知道有没有什么好的办法解决
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 06:35 , Processed in 0.359390 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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