我现在创建了一个对话框用于调整时间: 小时 分钟,小时对应两个按钮 “+” “-” , 分钟对应两个按钮“+” ,“-” ,小时和分钟分别用两个TEXT显示,初始是12 12 ,现在遇到的问题是:
当我先点击分钟的"+"后 分钟变成13,点击小时"+"后按说也应该变成13,但是变成了1313,测试发现,小时的那个TEXT显示的时候总会把分钟的一块显示了,弄不明白了,下面是我的代码,谢谢指教:
#include "includes.h"
u8 timeflag;
char timeh[2]; //小时
char timem[2]; //分钟
u8 timehnum=12;
u8 timemnum=12;
TEXT_Handle hText1,hText2;
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
{ FRAMEWIN_CreateIndirect, "TimeSet", 0, 0, 0, 320,240,FRAMEWIN_CF_MOVEABLE,0},
{ BUTTON_CreateIndirect, "+", GUI_ID_BUTTON27, 51, 17, 40, 33, 0,0},
{ BUTTON_CreateIndirect, "+", GUI_ID_BUTTON28, 204,17, 40, 33, 0,0},
{ BUTTON_CreateIndirect, "-", GUI_ID_BUTTON29, 51, 120,40, 33, 0,0},
{ BUTTON_CreateIndirect, "-", GUI_ID_BUTTON30, 204,120,40, 33, 0,0},
{ BUTTON_CreateIndirect, "OK", GUI_ID_BUTTON31, 34, 186,75, 23, 0,0},
{ BUTTON_CreateIndirect, "Cancel", GUI_ID_BUTTON32, 192,186,75, 23, 0,0},
{ TEXT_CreateIndirect, "12", GUI_ID_TEXT3, 204,78, 73, 23, 0,0},
{ TEXT_CreateIndirect, "12", GUI_ID_TEXT4, 51, 78, 73, 23, 0,0}
};
/*********************************************************************
*
* Dialog callback routine
*/
static void _cbCallback(WM_MESSAGE * pMsg)
{
int Id,NCode;
WM_HWIN hWin = pMsg->hWin;
hText2 = WM_GetDialogItem(hWin,GUI_ID_TEXT4);
hText1 = WM_GetDialogItem(hWin,GUI_ID_TEXT3);
switch(pMsg -> MsgId)
{
case WM_INIT_DIALOG:
TEXT_SetFont(hText1,&GUI_Font24_1);
TEXT_SetFont(hText2,&GUI_Font24_1);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg ->hWinSrc);
NCode = pMsg ->Data.v;
switch(NCode)
{
case WM_NOTIFICATION_RELEASED:
switch(Id)
{
case GUI_ID_BUTTON31:
timeflag=1; //ok
GUI_EndDialog(pMsg->hWin, 1);
break;
case GUI_ID_BUTTON32: //cancel
timeflag=2;
GUI_EndDialog(pMsg->hWin, 1);
break;
case GUI_ID_BUTTON27: //小时加
timehnum++;
if(timehnum==24)
timehnum=0;
timeh[0]=(timehnum/10)+0x30;
timeh[1]=(timehnum%10)+0x30;
TEXT_SetText(hText2,timeh);
TEXT_SetFont(hText2,&GUI_Font24_1); //ucGUI自带
break;
case GUI_ID_BUTTON29: //小时减
timehnum--;
if(timehnum==0)
timehnum=23;
timeh[0]=(timehnum/10)+0x30;
timeh[1]=(timehnum%10)+0x30;
TEXT_SetText(hText2,timeh);
TEXT_SetFont(hText2,&GUI_Font24_1); //ucGUI自带
break;
case GUI_ID_BUTTON28: //分钟加
timemnum++;
if(timemnum==60)
timemnum=0;
timem[0]=(timemnum/10)+0x30;
timem[1]=(timemnum%10)+0x30;
TEXT_SetText(hText1,timem);
TEXT_SetFont(hText1,&GUI_Font24_1); //ucGUI自带
break;
case GUI_ID_BUTTON30: //分钟减
timemnum--;
if(timemnum==0)
timemnum=59;
timem[0]=(timemnum/10)+0x30;
timem[1]=(timemnum%10)+0x30;
TEXT_SetText(hText1,timem);
TEXT_SetFont(hText1,&GUI_Font24_1); //ucGUI自带
break;
}
default:
break;
}
default:
WM_DefaultProc(pMsg);
break;
}
}
void Task_Time(void *pdata)
{
BUTTON_SetDefaultFont(&GUI_Font24_1);
GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbCallback, 0, 0, 0);
while(1)
{
if(timeflag==1) //ok
{
timeflag=0;
RTC_Configuration();
RTC_SetCounter(timehnum*3600+timemnum*60); //设定时间
//等待上次写操作完成 才能写操作
RTC_WaitForLastTask();
BKP_WriteBackupRegister(BKP_DR1,0xa5a5); //做个记号
Go_MainMenu(); //进入主菜单
OSTaskDel(OS_PRIO_SELF); //删除自己
}
if(timeflag==2)
{
Go_MainMenu(); //进入主菜单
OSTaskDel(OS_PRIO_SELF); //删除自己
}
OSTimeDlyHMSM(0,0,0,15);
}
} |