|
本帖最后由 cz123123 于 2018-12-20 09:32 编辑
- #include "GUI_MAIN.h" //这个地方替换成emwin那几个头文件
- #include "time_count.h"//这个头文件是计算日历的
- #define ID_WINDOW_0 (GUI_ID_USER + 0x01)
- #define ID_WINDOW_1 (GUI_ID_USER + 0x02)
- #define ID_TEXT_0 (GUI_ID_USER + 0x03)
- #define ID_TEXT_1 (GUI_ID_USER + 0x04)
- #define ID_BUTTON_0 (GUI_ID_USER + 0x05)
- #define ID_BUTTON_1 (GUI_ID_USER + 0x06)
- #define ID_BUTTON_2 (GUI_ID_USER + 0x07)
- /************头文件内容************/
- typedef struct
- {
- int Radius; // 圆角半径
- GUI_COLOR Pressed; // 按下状态的颜色
- GUI_COLOR UnPressed; // 未按下状态的颜色
- GUI_COLOR Outline; // 外部轮廓颜色
- }_ButtonRedrawColor;
- typedef struct
- {
- u16 year; ///<年 year 是unsigned short int 型
- u8 month; ///<月 month 是unsigned char 型
- u8 date; ///<日 date 是unsigned char 型
- u8 hours; ///<日 hours 是unsigned char 型
- u8 min; ///<日 min 是unsigned char 型
- u8 sec; ///<日 sec 是unsigned char 型
- }date_time_t;
- typedef struct
- {
- u8 flag;
- date_time_t disp_time;
- date_time_t set_time;
- }calender_t;
- extern void CreateDateWin(int x0,int y0,WM_HWIN hParent,U16 year,U8 month,U8 day);
- /**********C文件*********/
- static calender_t calender;
- int _ButtonCircleSkin(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo)
- {
- int xSize = WM_GetWindowSizeX(pDrawItemInfo->hWin); //获取按钮小工具的X大小
- int ySize = WM_GetWindowSizeY(pDrawItemInfo->hWin); //获取按钮小工具的Y大小
- _ButtonRedrawColor bColor={0};
- switch (pDrawItemInfo->Cmd)
- {
- case WIDGET_ITEM_DRAW_BACKGROUND:
- //绘制按钮的背景
- BUTTON_GetUserData(pDrawItemInfo->hWin,&bColor,sizeof(bColor));
- if (BUTTON_IsPressed(pDrawItemInfo->hWin)) //如果按钮被按下
- {
-
- GUI_SetColor(bColor.Pressed);
- GUI_AA_FillCircle(xSize/2,ySize/2,(ySize-1)/2);
- }
- else
- {
- GUI_SetColor(bColor.Outline);
- GUI_AA_DrawCircle(xSize/2,ySize/2,(ySize-1)/2);
- GUI_SetColor(bColor.UnPressed);
- GUI_AA_FillCircle(xSize/2,ySize/2,(ySize-3)/2);
- }
- break;
- default:
- return BUTTON_DrawSkinFlex(pDrawItemInfo);//其他命令就使用默认的皮肤
- }
- return 0;
- }
- static void cb_DateDlg(WM_MESSAGE * pMsg) {
- int NCode;
- int Id;
- char buf[20];
- WM_HWIN hItem,hEdit = 0;
- u8 Date = 0;
- switch (pMsg->MsgId) {
- case WM_DELETE:
-
- break;
- case WM_PAINT:
- GUI_SetFont(&GUI_FontHZ16B);
- GUI_SetTextMode(GUI_TM_TRANS);
- GUI_SetColor(GUI_BLACK);
- GUI_DispStringAt("一",25,0);
- GUI_DispStringAt("二",65,0);
- GUI_DispStringAt("三",105,0);
- GUI_DispStringAt("四",145,0);
- GUI_DispStringAt("五",185,0);
- GUI_DispStringAt("六",225,0);
- GUI_DispStringAt("日",265,0);
- break;
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc);
- NCode = pMsg->Data.v;
- switch (NCode)
- {
- case WM_NOTIFICATION_CLICKED:
- hItem = WM_GetDialogItem(pMsg->hWin,ID_BUTTON_2+calender.set_time.date);
- BUTTON_SetPressed(hItem,0);
- BUTTON_GetText(pMsg->hWinSrc,buf,sizeof(buf));
- calender.set_time.date = atoi((char*)buf);
- BUTTON_SetPressed(pMsg->hWinSrc,1);
- calender.disp_time = calender.set_time;
- break;
- case WM_NOTIFICATION_RELEASED:
- WM_GetUserData(WM_GetParent(pMsg->hWin),&hEdit,sizeof(hEdit));
- sprintf(buf,"%d-%d-%d",calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
- EDIT_SetText(hEdit,buf);
- if(WM_GetWindowSizeX(WM_GetParent(hEdit))!=110)
- WM_MoveWindow(WM_GetParent(hEdit),200,0);
- GUI_EndDialog(WM_GetParent(pMsg->hWin),0);
- break;
- }
- break;
-
- break;
- default:
- WM_DefaultProc(pMsg);
- break;
- }
- }
- void CreateDateWin(int x0,int y0,WM_HWIN hParent,U16 year,U8 month,U8 day)
- {
- WM_HWIN hWin,hItem;
- U8 Sumday;
- U8 i,j=0,k=0;
- char buf[10];
- _ButtonRedrawColor bColor={0,0xDDDDDD,0,0xDDDDDD};
- hWin = WINDOW_CreateEx(x0,y0,320, 240,hParent,WM_CF_SHOW,0,ID_WINDOW_1,cb_DateDlg);
-
- Sumday = CountDaysOfMonth(year,month);
- i = Count_CalcWeek(year,month,1)-1;//每月一号
- calender.flag = 1;
- while(1)
- {
- for(;i<7;i++)
- {
- k++;
- sprintf((char*)buf,"%d",k);
- hItem = BUTTON_CreateUser(10+40*i,20+35*j, 50, 35, hWin,WM_CF_SHOW,0,ID_BUTTON_2+k,sizeof(bColor));
- BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
- BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_WHITE);
- BUTTON_SetFont(hItem,&GUI_Font16B_1);//设置列表字体
- BUTTON_SetText(hItem,buf);
- bColor.UnPressed = GUI_WHITE;
- bColor.Outline = GUI_WHITE;
- bColor.Pressed = 0XC8A05E;
- BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
- BUTTON_SetSkin(hItem,_ButtonCircleSkin);
- if(k == day) BUTTON_SetPressed(hItem,1);
- if(k == Sumday)
- return;
- }
- j++;
- i = 0;
- }
- }
- static void cb_MonthDlg(WM_MESSAGE * pMsg) {
- int NCode;
- int Id;
- char buf[10];
- WM_HWIN hItem;
- switch (pMsg->MsgId) {
- case WM_DELETE:
-
- break;
- case WM_PAINT:
-
- break;
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc);
- NCode = pMsg->Data.v;
- switch (NCode)
- {
- case WM_NOTIFICATION_RELEASED:
- BUTTON_GetText(pMsg->hWinSrc,buf,sizeof(buf));
- calender.set_time.month = atoi((char*)buf);
- hItem = WM_GetDialogItem(WM_GetParent(pMsg->hWin), ID_TEXT_0);
- sprintf((char*)buf,"%d %d ",calender.set_time.year,calender.set_time.month);
- TEXT_SetText(hItem,(char*)buf);
- GUI_EndDialog(pMsg->hWin,0);
- 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 )
- CreateDateWin(15,68,WM_GetParent(pMsg->hWin),calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
- else
- CreateDateWin(15,68,WM_GetParent(pMsg->hWin),calender.set_time.year,calender.set_time.month,0);
- break;
- }
-
- break;
- default:
- WM_DefaultProc(pMsg);
- break;
- }
- }
- WM_HWIN CreateMonthWin(int x0,int y0,WM_HWIN hParent)
- {
- WM_HWIN hWin,hItem;
- U8 i=0,j=0;
- char buf[10];
- _ButtonRedrawColor bColor={0,0xDDDDDD,0,0xDDDDDD};
- hWin = WINDOW_CreateEx(x0,y0,320, 240,hParent,WM_CF_SHOW,0,ID_WINDOW_0,cb_MonthDlg);
- for(j=0;j<3;j++)
- for( i=0;i<4;i++)
- {
- hItem = BUTTON_CreateUser(80*i,80*j, 80, 80, hWin,WM_CF_SHOW,0,ID_BUTTON_2+i,sizeof(bColor));
- BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
- BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_WHITE);
- BUTTON_SetFont(hItem,&GUI_FontHZ24B);//设置列表字体
- sprintf(buf,"%d月",4*j+i+1);
- BUTTON_SetText(hItem,buf);
- bColor.UnPressed = GUI_WHITE;
- bColor.Outline = GUI_WHITE;
- bColor.Pressed = 0XC8A05E;
- BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
- BUTTON_SetSkin(hItem,_ButtonCircleSkin);
- }
- return hWin;
- }
- static void cb_calender(WM_MESSAGE * pMsg) {
- int NCode;
- int Id;
- GUI_RECT r={0};
- WM_HWIN hItem,hWin;
- char buf[10];
- switch (pMsg->MsgId) {
- case WM_DELETE:
-
- break;
- case WM_PAINT:
- WM_GetClientRect(&r);
- GUI_SetColor(GUI_WHITE);
- GUI_AA_FillRoundedRect(r.x0,r.y0,r.x1-1,r.y1-1,15);
- GUI_SetPenSize(2);
- GUI_SetColor(0xCCCCCC);
- GUI_AA_DrawRoundedRect(r.x0,r.y0,r.x1-1,r.y1-1,15);
- break;
-
- case WM_NOTIFY_PARENT:
- Id = WM_GetId(pMsg->hWinSrc);
- NCode = pMsg->Data.v;
- switch(Id) {
- case ID_TEXT_1:
- switch (NCode)
- {
- case WM_NOTIFICATION_RELEASED:
- WM_GetUserData(pMsg->hWin,&hWin,sizeof(hWin));
- if(WM_GetWindowSizeX(WM_GetParent(hWin))!=110)
- WM_MoveWindow(WM_GetParent(hWin),200,0);
- GUI_EndDialog(pMsg->hWin,0);
- break;
- }
- break;
- case ID_TEXT_0:
- switch (NCode)
- {
- case WM_NOTIFICATION_RELEASED:
-
- hItem = WM_GetNextSibling(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0));
- if(WM_IsWindow(hItem)&&calender.flag)
- {
- GUI_EndDialog(hItem,0);
- hWin = CreateMonthWin(15,68,pMsg->hWin);
- hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
- sprintf((char*)buf,"%d",calender.set_time.year);
- TEXT_SetText(hItem,buf);
- calender.flag = 0;
- }
- break;
- }
- break;
- case ID_BUTTON_0:
- switch (NCode)
- {
- case WM_NOTIFICATION_RELEASED:
- hItem = WM_GetNextSibling(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0));
- WM_GetUserData(pMsg->hWin,&hWin,sizeof(hWin));
- if(WM_IsWindow(hItem))
- {
- if(calender.flag)
- {
- calender.set_time.month--;
- if(calender.set_time.month == 0)
- {
- calender.set_time.year--;
- calender.set_time.month = 12;
- }
- GUI_EndDialog(hItem,0);//关闭日列表框
- 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 )
- CreateDateWin(15,68,pMsg->hWin,calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
- else
- CreateDateWin(15,68,pMsg->hWin,calender.set_time.year,calender.set_time.month,0);
- hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
- sprintf((char*)buf,"%d %d",calender.set_time.year,calender.set_time.month);
- TEXT_SetText(hItem,(char*)buf);
- }
- else
- {
- calender.set_time.year--;
- hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
- sprintf((char*)buf,"%d",calender.set_time.year);
- TEXT_SetText(hItem,(char*)buf);
- }
- }
- break;
- }
- break;
- case ID_BUTTON_1:
- switch (NCode)
- {
- case WM_NOTIFICATION_RELEASED:
- hItem = WM_GetNextSibling(WM_GetDialogItem(pMsg->hWin, ID_TEXT_0));
- WM_GetUserData(pMsg->hWin,&hWin,sizeof(hWin));
- if(WM_IsWindow(hItem))
- {
- if(calender.flag)
- {
- calender.set_time.month++;
- if(calender.set_time.month == 13)
- {
- calender.set_time.year++;
- calender.set_time.month = 1;
- }
-
- GUI_EndDialog(hItem,0);//关闭日列表框
- 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 )
- CreateDateWin(15,68,pMsg->hWin,calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
- else
- CreateDateWin(15,68,pMsg->hWin,calender.set_time.year,calender.set_time.month,0);
- hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
- sprintf((char*)buf,"%d %d",calender.set_time.year,calender.set_time.month);
- TEXT_SetText(hItem,(char*)buf);
- }
- else
- {
- calender.set_time.year++;
- hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
- sprintf((char*)buf,"%d",calender.set_time.year);
- TEXT_SetText(hItem,(char*)buf);
- }
- }
- break;
- }
- break;
- }
- break;
- default:
- WM_DefaultProc(pMsg);
- break;
- }
- }
- void Create_Calender(int x0,int y0,WM_HWIN hParent,U16 year,U8 month,U8 day,WM_HWIN hEdit)
- {
- WM_HWIN hCalendarDlg,hItem;
- _ButtonRedrawColor bColor={0,0xDDDDDD,0,0xDDDDDD};
- char buf[10];
- struct tm rtc_time;
- // calender_t calender;
-
- hCalendarDlg=WM_CreateWindowAsChild(x0,y0,350, 320,hParent,WM_CF_SHOW|WM_CF_HASTRANS,cb_calender,sizeof(hEdit));
- WM_MakeModal(hCalendarDlg);
- WM_SetUserData(hCalendarDlg,&hEdit,sizeof(hEdit));
- //初始化BUTTON0
- hItem = BUTTON_CreateUser(30, 25, 50, 35,hCalendarDlg,WM_CF_SHOW,0,ID_BUTTON_0,sizeof(bColor));
- BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
- BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_BLACK);
- BUTTON_SetFont(hItem,&GUI_FontHZ24B);//设置列表字体
- BUTTON_SetText(hItem,"<");
- bColor.UnPressed = GUI_WHITE;
- BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
- BUTTON_SetSkin(hItem,_ButtonCircleSkin);
- //初始化BUTTON1
- hItem = BUTTON_CreateUser(270, 25, 50, 35,hCalendarDlg,WM_CF_SHOW,0,ID_BUTTON_1,sizeof(bColor));
- BUTTON_SetTextColor(hItem,BUTTON_CI_UNPRESSED,GUI_BLACK);
- BUTTON_SetTextColor(hItem,BUTTON_CI_PRESSED,GUI_BLACK);
- BUTTON_SetFont(hItem,&GUI_FontHZ24B);//设置列表字体
- BUTTON_SetText(hItem,">");
- bColor.UnPressed = GUI_WHITE;
- BUTTON_SetUserData(hItem,&bColor,sizeof(bColor));
- BUTTON_SetSkin(hItem,_ButtonCircleSkin);
- if(!calender.disp_time.year ||!calender.disp_time.month
- ||!calender.disp_time.date )
- {
- if(year == 0 && month == 0 && day == 0 )
- {
- app_clock_get_datetime_tm(&rtc_time);//获取时间
- calender.disp_time.year = rtc_time.tm_year +1900 ;
- calender.disp_time.month = rtc_time.tm_mon +1 ;
- calender.disp_time.date = rtc_time.tm_mday ;
- }
- else
- {
- calender.disp_time.year = year ;
- calender.disp_time.month = month;
- calender.disp_time.date = day ;
- }
- }
- calender.set_time = calender.disp_time;
- sprintf(buf,"%d %d",calender.disp_time.year,calender.disp_time.month);
-
- hItem = TEXT_CreateEx(300,5, 50,50,hCalendarDlg,WM_CF_SHOW,0,ID_TEXT_1,"x");
- TEXT_SetFont(hItem,&GUI_Font24B_ASCII);
- TEXT_SetTextColor(hItem,GUI_GRAY);
- TEXT_SetTextAlign(hItem,TEXT_CF_HCENTER);
-
- hItem = TEXT_CreateEx(95, 28, 160, 30,hCalendarDlg,WM_CF_SHOW,0,ID_TEXT_0,buf);
- TEXT_SetTextAlign(hItem,TEXT_CF_HCENTER|TEXT_CF_VCENTER);
- TEXT_SetFont(hItem,&GUI_Font32B_1); //设置列表字体
- TEXT_SetTextColor(hItem,GUI_BLACK);
- CreateDateWin(15,68,hCalendarDlg,calender.disp_time.year,calender.disp_time.month,calender.disp_time.date);
- }
复制代码
效果图 实际看代码效果
效果图 实际看代码效果 |
评分
-
查看全部评分
|