|
在窗口中创建TEXT控件,窗口回到函数WM_PAINT消息重绘整个窗口。但是TEXT_SetText,父窗口会收到WM_PAINT。
想做个简单的时钟,创建一个窗口,窗口回调函数如下,PaintWin对整个窗口进行重绘需要较长时间,导致1s定时不准确。我的疑问是:为什么只TEXT_SetText调用,设置文本控件GUI_ID_TEXT0的字符串,其父窗口会收到WM_PAINT消息。有没有办法只更新文本控件GUI_ID_TEXT0的字符串,不发送WM_PAINT消息,不进行整个窗口重绘?或者有没有更好的准确延时方法,请各位大神指点一下,谢谢。
static void CallBack(WM_MESSAGE* pMsg)
{
uint8 aucTemp[32];
switch (pMsg->MsgId)
{
case WM_CREATE:
TEXT_CreateEx(0, 58*4+13, 200, 30,pMsg->hWin,WM_CF_SHOW,0,GUI_ID_TEXT0,"00:00:00");
TEXT_SetFont(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0),&GUI_FontHZ32);
TEXT_SetTextColor(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0),GUI_WHITE);
TEXT_SetTextAlign(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0),TEXT_CF_HCENTER|TEXT_CF_VCENTER );
TEXT_SetBkColor(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0),GUI_BLACK);
break;
case WM_PAINT:
PaintWin(pMsg);
break;
case WM_TIMER:
WM_RestartTimer(pMsg->Data.v, 1000); //定时器定时1秒
MyGetTime(aucTemp) ; //获取时间
TEXT_SetText(WM_GetDialogItem(pMsg->hWin, GUI_ID_TEXT0),(char*)aucTemp); //更新字符串,显示时:分:秒。问题:设置Text控件字符串会后,会收到WM_PAINT消息,执行PaintWin(pMsg)重绘整个窗口,效率低下,导致1s延时不准确。
break;
default:
WM_DefaultProc(pMsg);
break;
}
} |
|