|
发表于 2013-9-8 15:51:26
|
显示全部楼层
ycy9999:
若是窗口内容很多,而只需要修改一小部分,重绘岂不很浪费时间啊 
可以调用这个函数WM_InvalidateRect() 使部分窗口无效。
其实还有另一种办法来定时的更新,就是调用定时器函数,以前尝试UCGUI定时器函数的时候不能用
需要增加和修改一些东西才可以用,现在用的emWin5.16很好用,比如你要显示时间,定时的更新,
就可以这样:
/* 创建一个对话框 */
hWin1 = GUI_CreateDialogBox(_aDialogCreateMain,
GUI_COUNTOF(_aDialogCreateMain),
&_cbCallbackMain,
0,
0,
0);
/* 创建定时器,其功能是经过指定周期后,向指定窗口发送消息。
* 该定时器与指定窗口相关联。
*/
WM_CreateTimer(hWin1, /* 接受信息的窗口的句柄 */
0, /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
1000, /* 周期,此周期过后指定窗口应收到消息*/
0); /* 留待将来使用,应为0 */
在对话框的回调函数里面这样:
case WM_TIMER:
//注意这里,直接调用控件函数更新就可以的。
PROGBAR_SetValue(WM_GetDialogItem(hWin,GUI_ID_PROGBAR0), OSStatTaskCPUUsage);
Caculate_RTC(pMsg);
WM_RestartTimer(pMsg->Data.v, 1000);
break;
/*
*********************************************************************************************************
* 函 数 名: Caculate_RTC
* 功能说明: 显示RTC时间
* 形 参:
* 返 回 值: 无
*********************************************************************************************************
*/
static void Caculate_RTC(WM_MESSAGE * pMsg)
{
char buf[30];
WM_HWIN hWin = pMsg->hWin;
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
sprintf(buf,
"%0.2d:%0.2d:%0.2d %0.3s",
RTC_TimeStructure.RTC_Hours,
RTC_TimeStructure.RTC_Minutes,
RTC_TimeStructure.RTC_Seconds,
ucWeekDay[RTC_DateStructure.RTC_WeekDay-1]);
TEXT_SetText(WM_GetDialogItem(hWin,GUI_ID_TEXT1), buf);
sprintf(buf,
"20%0.2d/%0.2d/%0.2d",
RTC_DateStructure.RTC_Year,
RTC_DateStructure.RTC_Month,
RTC_DateStructure.RTC_Date);
TEXT_SetText(WM_GetDialogItem(hWin,GUI_ID_TEXT0), buf);
}
显示效果就是右下角那样的
|
|