硬汉嵌入式论坛

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

[emWin] 隱藏button

[复制链接]

13

主题

38

回帖

77

积分

初级会员

积分
77
发表于 2018-4-17 11:13:26 | 显示全部楼层 |阅读模式
請問各位,如果在一個視窗下有1個button小工具,我希望做button顯示幾秒後button自動隱藏,當手觸摸屏幕任意位置時, button再顯示出來。讓button隱藏和顯示要用emwin的哪個指令呢?

感謝大家協助。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-4-17 12:40:34 | 显示全部楼层
WM_ShowWindow() 表示显示窗口
WM_HideWindow()  表示隐藏窗口
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2018-4-17 13:09:16 | 显示全部楼层
eric2013 发表于 2018-4-17 12:40
WM_ShowWindow() 表示显示窗口
WM_HideWindow()  表示隐藏窗口

eric2013 謝謝你的回覆,請問這2個指令對小工具也有用嗎?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-4-17 13:12:22 | 显示全部楼层
victor0726 发表于 2018-4-17 13:09
eric2013 謝謝你的回覆,請問這2個指令對小工具也有用嗎?

是的,没问题。
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2018-4-17 13:23:57 | 显示全部楼层

eric2013 大大 不好意思,再請教一個問題,我若使用wm_timer來計時,當時間到時,如何取得button的句柄呢?
我是使用GUI_CreateDialogBox()來同時產生窗口和Button。
謝謝~
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-4-17 13:24:54 | 显示全部楼层
victor0726 发表于 2018-4-17 13:23
eric2013 大大 不好意思,再請教一個問題,我若使用wm_timer來計時,當時間到時,如何取得button的句柄呢 ...

方便的话,我看下你的写的代码。
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2018-4-17 13:32:06 | 显示全部楼层
eric2013 发表于 2018-4-17 13:24
方便的话,我看下你的写的代码。

eric2013您好: 有點亂,再麻煩你了。謝謝~

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Window", ID_FRAMEWIN_0, 0, 0, 480,272, 0, 0, 0 },  
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 355, 193, 80, 36, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button1",ID_BUTTON_1, 44, 207,100,29, 0,0},
  // USER START (Optionally insert additional widgets)
  // USER END
};



// USER START (Optionally insert additional static code)
// USER END
/*********************************************************************
*
*       _FramewinDrawSkin
*/
static int _DrawSkin(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) {
  switch (pDrawItemInfo->Cmd) {
  case WIDGET_ITEM_GET_BORDERSIZE_T: //視窗頂上邊框大小
    return Desk_FRAMEWIN_BORDERSIZE_T;
      
  case WIDGET_ITEM_GET_BORDERSIZE_B: //視窗頂下邊框大小
    return Desk_FRAMEWIN_BORDERSIZE_B;
   
  case WIDGET_ITEM_GET_BORDERSIZE_L: //視窗頂左邊框大小
    return Desk_FRAMEWIN_BORDERSIZE_L;
      
  case WIDGET_ITEM_GET_BORDERSIZE_R: //視窗頂右邊框大小
    return Desk_FRAMEWIN_BORDERSIZE_R;
      
  case WIDGET_ITEM_GET_RADIUS:       //視窗頂圓角半徑
    return Desk_FRAMEWIN_RADIUS;
  default:
    return FRAMEWIN_DrawSkinFlex(pDrawItemInfo);
  }
}

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN      hWin;

  int          NCode;
  int          Id;  
  int          data_buffer_block;
  static GUI_MEMDEV_Handle   pic;
  
  // USER START (Optionally insert additional variables)
  // USER END
  hWin = pMsg->hWin;
  
  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    FRAMEWIN_SetTitleVis(hWin,0);

    //pic  = GUI_MEMDEV_CreateEx(0, 0, 480 , 272 , GUI_MEMDEV_NOTRANS);
    break;
  
  case WM_KEY:
       data_buffer_block = 0;
    break;
  case WM_TOUCH:
       data_buffer_block = 0;
    break;
   
  case WM_SET_FOCUS:
    Id    = WM_GetId(pMsg->hWinSrc);   // 取得來源窗口ID
           Id++;
    break;
  
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);   // 取得來源窗口ID
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_BUTTON_0: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_LOST_FOCUS:
           hWin = WM_GetFocussedWindow();
           hWin++;
        break;
        
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:            
        Monitor_fg      = 0;                       //關閉讀取jpeg圖檔模式
        //GUI_MEMDEV_Delete(pic);                    //釋放儲存空間
        GUI_EndDialog(pMsg->hWin,0);               //結束對話框,窗口管理器在刪除窗口時會自動連帶刪除与其相關的定時器
        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
    case WM_PAINT: //重繪背景
     
        //data_buffer_block = mjpegdec_decode((u8*)MEM_Buffer[Jpeg_Read_Ptr],Jpeg_Len[Jpeg_Read_Ptr],GUI_MEMDEV_GetDataPtr(pic));
        pic  = GUI_MEMDEV_CreateEx(0, 0, 480 , 272 , GUI_MEMDEV_NOTRANS);
        data_buffer_block = mjpegdec_decode((u8*)pic1,33400,GUI_MEMDEV_GetDataPtr(pic));
        
        if(data_buffer_block == 2){   //jpeg解碼異常
          Rx_End_fg = 0;      
        }
        GUI_MEMDEV_Write(pic);
        GUI_MEMDEV_Delete(pic);                    //釋放儲存空間
        Mem_Buffer_Len[Jpeg_Read_Ptr] = 0;               //顯示完成,清除Mem_Buffer長度,釋放空間。
        
      
        if(Jpeg_Read_Ptr<MEM_buffer_block-1){Jpeg_Read_Ptr++;}            //指向下一張圖。   
        else{Jpeg_Read_Ptr = 0;}
        
        
        
        GUI_SetTextMode(GUI_TM_TRANS);
        GUI_SetColor(0xff0000);
        GUI_SetFont(&GUI_Font24B_ASCII);
        
        GUI_DispStringAt("0<T<5",125,20);
        GUI_DispStringAt("5<T<10",125,35);
        GUI_DispStringAt("10<T<15",125,50);
        GUI_DispStringAt("15<T<20",125,65);
        GUI_DispStringAt("20<T<25",125,80);
        GUI_DispStringAt("25<T<30",125,95);
        GUI_DispStringAt("30<T<35",125,110);
        GUI_DispStringAt("35<T<40",125,125);
        GUI_DispStringAt("40<T<45",125,140);        
        GUI_DispStringAt("45<T<50",125,155);
        GUI_DispStringAt("50<T<55",125,170);
        GUI_DispStringAt("55<T<100",125,185);
        
        GUI_DispDecAt(test,200,5,10);
        
        GUI_DispDecAt(Time_5s_cnt,230,20,10);
        GUI_DispDecAt(Time_10s_cnt,230,35,10);
        GUI_DispDecAt(Time_15s_cnt,230,50,10);
        GUI_DispDecAt(Time_20s_cnt,230,65,10);
        GUI_DispDecAt(Time_25s_cnt,230,80,10);
        GUI_DispDecAt(Time_30s_cnt,230,95,10);
        GUI_DispDecAt(Time_35s_cnt,230,110,10);
        GUI_DispDecAt(Time_40s_cnt,230,125,10);
        GUI_DispDecAt(Time_45s_cnt,230,140,10);
        GUI_DispDecAt(Time_50s_cnt,230,155,10);
        GUI_DispDecAt(Time_55s_cnt,230,170,10);
        GUI_DispDecAt(Time_1m_cnt,230,185,10);
        
        
   /*  
      data_buffer_block = mjpegdec_decode((u8*)pic1,33400,GUI_MEMDEV_GetDataPtr(pic));
      if(data_buffer_block == 2){   //jpeg解碼異常
        Rx_End_fg = 0;
      }  
      if(Rx_End_fg){
        Rx_End_fg = 0;
        //mjpegdec_decode(Jpeg_DatStr,JpegData_Len,GUI_MEMDEV_GetDataPtr(pic));         
        //GUI_MEMDEV_Write(pic);
        
      }
      GUI_MEMDEV_Write(pic);
      
      GUI_SetTextMode(GUI_TM_TRANS); //
      GUI_SetColor(0xff0000);
      GUI_SetFont(&GUI_Font24B_ASCII);
      //GUI_DispStringAt(Calendar_Mem,150,20);   //顯示字串   
      GUI_DispDecAt(test,200,60,10);
     */
    break;     
   
    case WM_TIMER:      
      Id = WM_GetTimerId(pMsg->Data.v);  
      switch(Id){
        case Comm_TX_Timer:     //固定時間發送命令(每1.5s)
          if(DMA_Tx_Stop_fg){
            WM_RestartTimer(pMsg->Data.v, Buffer_HalfFull_Delay_Time); //DMA buffer半滿(
          }
          else{
            //GPIO_ToggleBits(GPIOB,GPIO_Pin_7);
            WM_RestartTimer(pMsg->Data.v, Buffer_Normal_Delay_Time);   //DMA buffer正常
            Modbus_Comm_Num = 0;      
            TCP_TX_Prg();        //發出請求圖檔命令至主機,更新圖片  
            DMA_Tx_Stop_fg = 1;
          }
        break;         
         
        case Data_Combin_Timer: //固定時間判斷接收是否完成   
          //GPIO_ToggleBits(GPIOB,GPIO_Pin_7);
          /*
          if(Jpeg_Combin_prg()){
          //Jpeg_Combin_prg();
            if(Mem_Buffer_Len[Jpeg_Read_Ptr] != 0){ //
              WM_InvalidateWindow(hWin);          //通知窗口管理器,此窗口無效,重新繪制窗口。              
            }
          } */   
          if(DMA_Rx_Stop_fg){
            DMA_Rx_Stop_fg = 0 ;
            WM_InvalidateWindow(hWin);          //通知窗口管理器,此窗口無效,重新繪制窗口。
          }
          WM_RestartTimer(pMsg->Data.v, Data_Chk_Delay_Time);
        break;
        
        default:
         
        break;      
      
      
      //WM_InvalidateWindow(hWin);          //通知窗口管理器,此窗口無效,重新繪制窗口。
      }
    break;
   
    case WM_USER:
      WM_RestartTimer(pMsg->Data.v, 30);
      
   
    break;
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateWindow
*/
void MT_Screen_Startup(WM_HWIN hWin, unsigned short int xpos, unsigned short int ypos){
  WM_HWIN                      hItem;  
  
  hItem = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, 0, 0, 0);  
  FRAMEWIN_SetSkin(hItem, _DrawSkin); //該視窗加入換膚回調函數  
  WM_CreateTimer(WM_GetClientWindow(hItem), Comm_TX_Timer, Buffer_Normal_Delay_Time, 0);
  WM_CreateTimer(WM_GetClientWindow(hItem), Data_Combin_Timer, Data_Chk_Delay_Time, 0);  //接收資料處理程式每30ms檢查一次。

  
}
回复

使用道具 举报

13

主题

38

回帖

77

积分

初级会员

积分
77
 楼主| 发表于 2018-4-17 16:53:34 | 显示全部楼层
victor0726 发表于 2018-4-17 13:32
eric2013您好: 有點亂,再麻煩你了。謝謝~

/***************************************************** ...

eric2013您好:我已經做出想要的功能了,謝謝你的提點。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-4-18 09:24:01 | 显示全部楼层
victor0726 发表于 2018-4-17 16:53
eric2013您好:我已經做出想要的功能了,謝謝你的提點。

在你的定时器消息里面通过
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
就可以获取,然后就可以设置了,比如下面设置字体和文本。

BUTTON_SetFont(hItem, GUI_FONT_16_1);
BUTTON_SetText(hItem, "OK");

回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-4-18 16:15:43 | 显示全部楼层
WM_HideWin();WM_ShowWin();这是显示和隐藏控件用的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2018-4-18 16:18:03 | 显示全部楼层
hanzixiangel 发表于 2018-4-18 16:15
WM_HideWin();WM_ShowWin();这是显示和隐藏控件用的

不限制。

WM_ShowWindow()
WM_HideWindow()

也可以。
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-4-18 16:19:24 | 显示全部楼层
eric2013 发表于 2018-4-18 16:18
不限制。

WM_ShowWindow()

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-19 19:23 , Processed in 0.048648 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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