硬汉嵌入式论坛

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

[emWin] 发个圆角矩形的日历代码

[复制链接]

12

主题

104

回帖

140

积分

初级会员

积分
140
发表于 2018-12-20 09:32:14 | 显示全部楼层 |阅读模式
本帖最后由 cz123123 于 2018-12-20 09:32 编辑
  1. #include "GUI_MAIN.h"  //这个地方替换成emwin那几个头文件
  2. #include "time_count.h"//这个头文件是计算日历的

  3. #define ID_WINDOW_0    (GUI_ID_USER + 0x01)
  4. #define ID_WINDOW_1    (GUI_ID_USER + 0x02)
  5. #define ID_TEXT_0      (GUI_ID_USER + 0x03)
  6. #define ID_TEXT_1      (GUI_ID_USER + 0x04)
  7. #define ID_BUTTON_0    (GUI_ID_USER + 0x05)
  8. #define ID_BUTTON_1    (GUI_ID_USER + 0x06)
  9. #define ID_BUTTON_2    (GUI_ID_USER + 0x07)



  10. /************头文件内容************/

  11. typedef struct
  12. {
  13.         int         Radius;                // 圆角半径
  14.         GUI_COLOR        Pressed;                // 按下状态的颜色
  15.         GUI_COLOR        UnPressed;        // 未按下状态的颜色
  16.         GUI_COLOR Outline;    // 外部轮廓颜色

  17. }_ButtonRedrawColor;

  18. typedef struct
  19. {
  20.     u16  year;                                                                ///<年 year  是unsigned short int 型
  21.     u8   month;                                                               ///<月 month 是unsigned char      型
  22.     u8   date;                                                                ///<日 date  是unsigned char      型
  23.     u8   hours;                                                               ///<日 hours 是unsigned char      型
  24.     u8   min;                                                                 ///<日 min   是unsigned char      型
  25.     u8   sec;                                                                 ///<日 sec   是unsigned char      型
  26. }date_time_t;


  27. typedef struct
  28. {
  29. u8 flag;        
  30. date_time_t disp_time;
  31. date_time_t set_time;
  32. }calender_t;

  33. extern void CreateDateWin(int x0,int y0,WM_HWIN hParent,U16 year,U8 month,U8 day);

  34. /**********C文件*********/
  35. static calender_t  calender;


  36.   int  _ButtonCircleSkin(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
  37. {
  38.         int xSize     = WM_GetWindowSizeX(pDrawItemInfo->hWin);        //获取按钮小工具的X大小
  39.         int ySize     = WM_GetWindowSizeY(pDrawItemInfo->hWin);        //获取按钮小工具的Y大小
  40.         _ButtonRedrawColor bColor={0};
  41.         switch (pDrawItemInfo->Cmd)
  42.         {
  43.                 case WIDGET_ITEM_DRAW_BACKGROUND:
  44.                         //绘制按钮的背景
  45.                   BUTTON_GetUserData(pDrawItemInfo->hWin,&bColor,sizeof(bColor));
  46.                         if (BUTTON_IsPressed(pDrawItemInfo->hWin))                                                                                 //如果按钮被按下
  47.                         {
  48.                                  
  49.                                         GUI_SetColor(bColor.Pressed);
  50.                                   GUI_AA_FillCircle(xSize/2,ySize/2,(ySize-1)/2);
  51.                         }
  52.                         else
  53.                         {
  54.                                   GUI_SetColor(bColor.Outline);
  55.                                   GUI_AA_DrawCircle(xSize/2,ySize/2,(ySize-1)/2);
  56.                                         GUI_SetColor(bColor.UnPressed);
  57.                                         GUI_AA_FillCircle(xSize/2,ySize/2,(ySize-3)/2);
  58.                         }
  59.                         break;
  60.                         default:
  61.                         return BUTTON_DrawSkinFlex(pDrawItemInfo);//其他命令就使用默认的皮肤
  62.         }
  63.         return 0;
  64. }


  65. static void cb_DateDlg(WM_MESSAGE * pMsg) {
  66.   int NCode;
  67.   int Id;
  68.         char buf[20];
  69.         WM_HWIN hItem,hEdit = 0;
  70.         u8 Date = 0;
  71.   switch (pMsg->MsgId) {
  72.         case WM_DELETE:
  73.                     
  74.                 break;
  75.     case WM_PAINT:
  76.                         GUI_SetFont(&GUI_FontHZ16B);
  77.                         GUI_SetTextMode(GUI_TM_TRANS);
  78.                         GUI_SetColor(GUI_BLACK);
  79.                         GUI_DispStringAt("一",25,0);
  80.                         GUI_DispStringAt("二",65,0);
  81.                         GUI_DispStringAt("三",105,0);
  82.                         GUI_DispStringAt("四",145,0);
  83.                         GUI_DispStringAt("五",185,0);
  84.                         GUI_DispStringAt("六",225,0);
  85.                         GUI_DispStringAt("日",265,0);
  86.                         break;
  87.     case WM_NOTIFY_PARENT:
  88.                 Id    = WM_GetId(pMsg->hWinSrc);
  89.                 NCode = pMsg->Data.v;


  90.                         switch (NCode)
  91.                         {
  92.         case  WM_NOTIFICATION_CLICKED:
  93.                                              hItem = WM_GetDialogItem(pMsg->hWin,ID_BUTTON_2+calender.set_time.date);
  94.                                                          BUTTON_SetPressed(hItem,0);
  95.                                                          BUTTON_GetText(pMsg->hWinSrc,buf,sizeof(buf));
  96.                                                          calender.set_time.date = atoi((char*)buf);
  97.                                                          BUTTON_SetPressed(pMsg->hWinSrc,1);
  98.                                        calender.disp_time = calender.set_time;
  99.                                         break;
  100.                                 case  WM_NOTIFICATION_RELEASED:
  101.                                        WM_GetUserData(WM_GetParent(pMsg->hWin),&hEdit,sizeof(hEdit));
  102.                                        sprintf(buf,"%d-%d-%d",calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
  103.                                        EDIT_SetText(hEdit,buf);
  104.                                        if(WM_GetWindowSizeX(WM_GetParent(hEdit))!=110)
  105.                                                          WM_MoveWindow(WM_GetParent(hEdit),200,0);
  106.                                        GUI_EndDialog(WM_GetParent(pMsg->hWin),0);
  107.                                         break;                     
  108.                         }
  109.                         break;
  110.                         
  111.     break;

  112.   default:
  113.     WM_DefaultProc(pMsg);
  114.     break;
  115.   }
  116. }

  117. void CreateDateWin(int x0,int y0,WM_HWIN hParent,U16 year,U8 month,U8 day)
  118. {
  119.          WM_HWIN hWin,hItem;
  120.          U8 Sumday;
  121.          U8 i,j=0,k=0;
  122.          char buf[10];
  123.          _ButtonRedrawColor bColor={0,0xDDDDDD,0,0xDDDDDD};
  124.          hWin = WINDOW_CreateEx(x0,y0,320, 240,hParent,WM_CF_SHOW,0,ID_WINDOW_1,cb_DateDlg);
  125.          
  126.          Sumday = CountDaysOfMonth(year,month);
  127.    i = Count_CalcWeek(year,month,1)-1;//每月一号
  128.          calender.flag = 1;
  129.          while(1)
  130.          {
  131.            for(;i<7;i++)
  132.                 {
  133.                         k++;
  134.                         sprintf((char*)buf,"%d",k);
  135.                         hItem = BUTTON_CreateUser(10+40*i,20+35*j, 50, 35, hWin,WM_CF_SHOW,0,ID_BUTTON_2+k,sizeof(bColor));
  136.                         BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
  137.                         BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_WHITE);
  138.                         BUTTON_SetFont(hItem,&GUI_Font16B_1);//设置列表字体
  139.                         BUTTON_SetText(hItem,buf);
  140.                         bColor.UnPressed = GUI_WHITE;
  141.                         bColor.Outline = GUI_WHITE;
  142.                         bColor.Pressed = 0XC8A05E;
  143.                         BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
  144.                         BUTTON_SetSkin(hItem,_ButtonCircleSkin);
  145.                         if(k == day) BUTTON_SetPressed(hItem,1);
  146.                         if(k == Sumday)
  147.                           return;
  148.                 }
  149.                 j++;
  150.                 i = 0;
  151.         }
  152. }
  153. static void cb_MonthDlg(WM_MESSAGE * pMsg) {
  154.   int NCode;
  155.   int Id;
  156.         char buf[10];
  157.         WM_HWIN hItem;
  158.   switch (pMsg->MsgId) {
  159.         case WM_DELETE:
  160.                   
  161.                 break;
  162.     case WM_PAINT:
  163.                         
  164.                         break;
  165.     case WM_NOTIFY_PARENT:
  166.                 Id    = WM_GetId(pMsg->hWinSrc);
  167.                 NCode = pMsg->Data.v;

  168.                         switch (NCode)
  169.                         {

  170.                                 case  WM_NOTIFICATION_RELEASED:
  171.                                                                 BUTTON_GetText(pMsg->hWinSrc,buf,sizeof(buf));
  172.                                         calender.set_time.month = atoi((char*)buf);
  173.                                                                 hItem = WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_TEXT_0);
  174.                                                                 sprintf((char*)buf,"%d %d ",calender.set_time.year,calender.set_time.month);
  175.                                                                 TEXT_SetText(hItem,(char*)buf);
  176.                                                                 GUI_EndDialog(pMsg->hWin,0);
  177.                                         if(calender.disp_time.year == calender.set_time.year && calender.disp_time.month == calender.set_time.month &&calender.disp_time.date == calender.set_time.date )
  178.                                                                         CreateDateWin(15,68,WM_GetParent(pMsg->hWin),calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
  179.                                                                 else
  180.                                                                         CreateDateWin(15,68,WM_GetParent(pMsg->hWin),calender.set_time.year,calender.set_time.month,0);
  181.                                         break;
  182.                         }
  183.                         
  184.     break;

  185.   default:
  186.     WM_DefaultProc(pMsg);
  187.     break;
  188.   }
  189. }
  190. WM_HWIN CreateMonthWin(int x0,int y0,WM_HWIN hParent)
  191. {
  192.          WM_HWIN hWin,hItem;
  193.          U8 i=0,j=0;
  194.          char buf[10];
  195.          _ButtonRedrawColor bColor={0,0xDDDDDD,0,0xDDDDDD};
  196.          hWin = WINDOW_CreateEx(x0,y0,320, 240,hParent,WM_CF_SHOW,0,ID_WINDOW_0,cb_MonthDlg);
  197.          for(j=0;j<3;j++)
  198.                 for( i=0;i<4;i++)
  199.                 {
  200.                         hItem = BUTTON_CreateUser(80*i,80*j, 80, 80, hWin,WM_CF_SHOW,0,ID_BUTTON_2+i,sizeof(bColor));
  201.                         BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
  202.                         BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_WHITE);
  203.                         BUTTON_SetFont(hItem,&GUI_FontHZ24B);//设置列表字体
  204.                         sprintf(buf,"%d月",4*j+i+1);
  205.                         BUTTON_SetText(hItem,buf);
  206.                         bColor.UnPressed = GUI_WHITE;
  207.                         bColor.Outline = GUI_WHITE;
  208.                         bColor.Pressed = 0XC8A05E;
  209.                         BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
  210.                         BUTTON_SetSkin(hItem,_ButtonCircleSkin);
  211.                 }
  212.                 return hWin;
  213. }

  214. static void cb_calender(WM_MESSAGE * pMsg) {
  215.         int NCode;
  216.   int Id;
  217.         GUI_RECT r={0};
  218.         WM_HWIN hItem,hWin;
  219.         char buf[10];
  220.   switch (pMsg->MsgId) {
  221.         case WM_DELETE:
  222.                     
  223.                 break;
  224.     case WM_PAINT:
  225.                         WM_GetClientRect(&r);
  226.                         GUI_SetColor(GUI_WHITE);
  227.                         GUI_AA_FillRoundedRect(r.x0,r.y0,r.x1-1,r.y1-1,15);
  228.                         GUI_SetPenSize(2);
  229.                         GUI_SetColor(0xCCCCCC);
  230.                         GUI_AA_DrawRoundedRect(r.x0,r.y0,r.x1-1,r.y1-1,15);
  231.                         break;
  232.    
  233.     case WM_NOTIFY_PARENT:
  234.                 Id    = WM_GetId(pMsg->hWinSrc);
  235.                 NCode = pMsg->Data.v;
  236.                 switch(Id) {
  237.                         case ID_TEXT_1:
  238.                          switch (NCode)
  239.                         {
  240.                                         case  WM_NOTIFICATION_RELEASED:
  241.                                                 WM_GetUserData(pMsg->hWin,&hWin,sizeof(hWin));
  242.                                                 if(WM_GetWindowSizeX(WM_GetParent(hWin))!=110)
  243.                                                          WM_MoveWindow(WM_GetParent(hWin),200,0);
  244.                                                 GUI_EndDialog(pMsg->hWin,0);
  245.                                         break;
  246.                         }
  247.                                 break;
  248.                         case ID_TEXT_0:
  249.                                 switch (NCode)
  250.                         {

  251.                                 case  WM_NOTIFICATION_RELEASED:
  252.                                           
  253.                                       hItem = WM_GetNextSibling(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0));
  254.                                       if(WM_IsWindow(hItem)&&calender.flag)
  255.                                                         {
  256.                                                           GUI_EndDialog(hItem,0);
  257.                                                                 hWin = CreateMonthWin(15,68,pMsg->hWin);
  258.                                                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
  259.                                                                 sprintf((char*)buf,"%d",calender.set_time.year);
  260.                                                                 TEXT_SetText(hItem,buf);
  261.                                                                 calender.flag = 0;
  262.                                                         }
  263.                                         break;
  264.                         }
  265.                         break;
  266.                         case ID_BUTTON_0:
  267.                                         switch (NCode)
  268.                         {

  269.                                 case  WM_NOTIFICATION_RELEASED:
  270.                                                         hItem = WM_GetNextSibling(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0));
  271.                                       WM_GetUserData(pMsg->hWin,&hWin,sizeof(hWin));
  272.                                                         if(WM_IsWindow(hItem))
  273.                                                         {        
  274.                                                                         if(calender.flag)
  275.                                                                         {
  276.                                                                                  calender.set_time.month--;
  277.                                                                                  if(calender.set_time.month == 0)
  278.                                                                                         {
  279.                                                                                                 calender.set_time.year--;        
  280.                                                                                                 calender.set_time.month = 12;
  281.                                                                                         }
  282.                                                                                         GUI_EndDialog(hItem,0);//关闭日列表框
  283.                                                                                         if(calender.disp_time.year == calender.set_time.year && calender.disp_time.month == calender.set_time.month &&calender.disp_time.date == calender.set_time.date )
  284.                                                                                                 CreateDateWin(15,68,pMsg->hWin,calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
  285.                                                                                         else
  286.                                                                                                 CreateDateWin(15,68,pMsg->hWin,calender.set_time.year,calender.set_time.month,0);
  287.                                                                                         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);        
  288.                                                                                         sprintf((char*)buf,"%d %d",calender.set_time.year,calender.set_time.month);
  289.                                                                                         TEXT_SetText(hItem,(char*)buf);
  290.                                                                         }
  291.                                                                         else
  292.                                                                         {
  293.                                                                     calender.set_time.year--;
  294.                                                                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);        
  295.                                                                                 sprintf((char*)buf,"%d",calender.set_time.year);
  296.                                                                                 TEXT_SetText(hItem,(char*)buf);        
  297.                                                                         }
  298.                                                         }
  299.                                         break;
  300.                         }
  301.                         break;
  302.                         case ID_BUTTON_1:
  303.                                         switch (NCode)
  304.                         {

  305.                                 case  WM_NOTIFICATION_RELEASED:
  306.                                                         hItem = WM_GetNextSibling(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0));
  307.                                       WM_GetUserData(pMsg->hWin,&hWin,sizeof(hWin));
  308.                                       if(WM_IsWindow(hItem))
  309.                                                         {        
  310.                                                                 if(calender.flag)
  311.                                                                 {                                                
  312.                                                                                 calender.set_time.month++;
  313.                                                                                         if(calender.set_time.month == 13)
  314.                                                                                         {
  315.                                                                                                 calender.set_time.year++;        
  316.                                                                                                 calender.set_time.month = 1;
  317.                                                                                         }
  318.                                                                                        
  319.                                                                                         GUI_EndDialog(hItem,0);//关闭日列表框
  320.                                                                                         if(calender.disp_time.year == calender.set_time.year && calender.disp_time.month == calender.set_time.month &&calender.disp_time.date == calender.set_time.date )
  321.                                                                                                 CreateDateWin(15,68,pMsg->hWin,calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
  322.                                                                                         else
  323.                                                                                                 CreateDateWin(15,68,pMsg->hWin,calender.set_time.year,calender.set_time.month,0);
  324.                                                                                         hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);        
  325.                                                                                         sprintf((char*)buf,"%d %d",calender.set_time.year,calender.set_time.month);
  326.                                                                                         TEXT_SetText(hItem,(char*)buf);
  327.                                                                         }
  328.                                                                         else
  329.                                                                         {
  330.                                                                     calender.set_time.year++;
  331.                                                                                 hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);        
  332.                                                                                 sprintf((char*)buf,"%d",calender.set_time.year);
  333.                                                                                 TEXT_SetText(hItem,(char*)buf);        
  334.                                                                         }
  335.                                                         }
  336.                                         break;
  337.                         }
  338.                         break;
  339.     }
  340.     break;

  341.   default:
  342.     WM_DefaultProc(pMsg);
  343.     break;
  344.   }
  345. }


  346. void Create_Calender(int x0,int y0,WM_HWIN hParent,U16 year,U8 month,U8 day,WM_HWIN hEdit)
  347. {
  348.         WM_HWIN hCalendarDlg,hItem;
  349.         _ButtonRedrawColor bColor={0,0xDDDDDD,0,0xDDDDDD};
  350.         char buf[10];
  351.         struct tm         rtc_time;
  352. //        calender_t  calender;
  353.         
  354.         hCalendarDlg=WM_CreateWindowAsChild(x0,y0,350, 320,hParent,WM_CF_SHOW|WM_CF_HASTRANS,cb_calender,sizeof(hEdit));
  355.   WM_MakeModal(hCalendarDlg);        
  356.         WM_SetUserData(hCalendarDlg,&hEdit,sizeof(hEdit));
  357.         //初始化BUTTON0
  358.         hItem = BUTTON_CreateUser(30, 25, 50, 35,hCalendarDlg,WM_CF_SHOW,0,ID_BUTTON_0,sizeof(bColor));
  359.         BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
  360.         BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_BLACK);
  361.         BUTTON_SetFont(hItem,&GUI_FontHZ24B);//设置列表字体
  362.         BUTTON_SetText(hItem,"<");
  363.         bColor.UnPressed = GUI_WHITE;
  364.         BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
  365.         BUTTON_SetSkin(hItem,_ButtonCircleSkin);
  366.         //初始化BUTTON1
  367.         hItem = BUTTON_CreateUser(270, 25, 50, 35,hCalendarDlg,WM_CF_SHOW,0,ID_BUTTON_1,sizeof(bColor));
  368.         BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
  369.         BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_BLACK);
  370.         BUTTON_SetFont(hItem,&GUI_FontHZ24B);//设置列表字体
  371.         BUTTON_SetText(hItem,">");
  372.         bColor.UnPressed = GUI_WHITE;
  373.         BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
  374.         BUTTON_SetSkin(hItem,_ButtonCircleSkin);
  375.   if(!calender.disp_time.year ||!calender.disp_time.month
  376.            ||!calender.disp_time.date )
  377.          {  
  378.                 if(year == 0 && month == 0 &&        day == 0 )
  379.                 {
  380.                         app_clock_get_datetime_tm(&rtc_time);//获取时间
  381.                         calender.disp_time.year  = rtc_time.tm_year +1900 ;
  382.                         calender.disp_time.month = rtc_time.tm_mon +1 ;
  383.                         calender.disp_time.date  = rtc_time.tm_mday ;
  384.                 }
  385.                 else
  386.                 {
  387.                         calender.disp_time.year  =  year ;
  388.                         calender.disp_time.month =  month;
  389.                         calender.disp_time.date  =  day ;
  390.                 }
  391.         }
  392.         calender.set_time =  calender.disp_time;
  393.         sprintf(buf,"%d %d",calender.disp_time.year,calender.disp_time.month);
  394.         
  395.         hItem = TEXT_CreateEx(300,5, 50,50,hCalendarDlg,WM_CF_SHOW,0,ID_TEXT_1,"x");
  396.         TEXT_SetFont(hItem,&GUI_Font24B_ASCII);
  397.         TEXT_SetTextColor(hItem,GUI_GRAY);
  398.         TEXT_SetTextAlign(hItem,TEXT_CF_HCENTER);
  399.         
  400.         hItem = TEXT_CreateEx(95, 28, 160, 30,hCalendarDlg,WM_CF_SHOW,0,ID_TEXT_0,buf);
  401.         TEXT_SetTextAlign(hItem,TEXT_CF_HCENTER|TEXT_CF_VCENTER);
  402.         TEXT_SetFont(hItem,&GUI_Font32B_1);          //设置列表字体
  403.         TEXT_SetTextColor(hItem,GUI_BLACK);
  404.         CreateDateWin(15,68,hCalendarDlg,calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
  405. }
复制代码

效果图 实际看代码效果

效果图  实际看代码效果
效果图  实际看代码效果

评分

参与人数 1金币 +50 收起 理由
eric2013 + 50 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2018-12-20 09:39:51 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

12

主题

104

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-12-20 09:42:03 | 显示全部楼层

多谢大佬支持才对
回复

使用道具 举报

17

主题

63

回帖

114

积分

初级会员

积分
114
发表于 2018-12-21 09:59:26 | 显示全部楼层
楼主,可以发个gif操作动画吗?
回复

使用道具 举报

12

主题

104

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-12-21 10:14:26 | 显示全部楼层
ssis909 发表于 2018-12-21 09:59
楼主,可以发个gif操作动画吗?

好像不太好弄。。
回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2018-12-21 10:45:42 | 显示全部楼层
看代码,楼主这个是自己重新实现的。这样的话,用户还得需要自己处理下日期。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

12

主题

104

回帖

140

积分

初级会员

积分
140
 楼主| 发表于 2018-12-21 10:59:59 | 显示全部楼层
byccc 发表于 2018-12-21 10:45
看代码,楼主这个是自己重新实现的。这样的话,用户还得需要自己处理下日期。

是啊。官方那个太丑了。。

评分

参与人数 1金币 +10 收起 理由
guoxiang + 10 很给力!

查看全部评分

回复

使用道具 举报

36

主题

2050

回帖

2158

积分

至尊会员

积分
2158
发表于 2018-12-21 11:02:47 | 显示全部楼层
cz123123 发表于 2018-12-21 10:59
是啊。官方那个太丑了。。

官方那个的确丑,不够炫酷,应该搞个炫酷的皮肤效果。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 18:07 , Processed in 0.341000 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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