大学生
最后登录1970-1-1
在线时间 小时
注册时间2020-1-15
|
2火花
想完成 计时功能,数组输出正常,但是text 每次更新都是重叠而不是覆盖,不知道哪错了求大神帮下小弟
//主任务
void MainTask(void)
{
GUI_Init();
// /* 窗口自动使用存储设备 */
WM_SetCreateFlags(WM_CF_MEMDEV);
TextCreate();
GUI_Exec();
while(1)
{
hWin = WM_GetDesktopWindow();
hItem = WM_GetDialogItem(hWin, ID_TEXT_LocalTime);
TEXT_SetText(hItem, (const char*)DisLocalTime);
GUI_Exec();
}
//桌面窗口回调函数
static void _cbBkWin(WM_MESSAGE * pMsg)
{
WM_HWIN hwin;
//hwin = pMsg->hWin;
switch(pMsg->MsgId)
{
case WM_PAINT:
hwin = WM_GetDialogItem(pMsg->hWin, ID_TEXT_LocalTime);
TEXT_SetText(hwin, (const char*)DisLocalTime);
WM_InvalidateWindow(hwin);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
//创建text 控件
void TextCreate(void)
{
WM_HWIN hLocalTime;
WM_CALLBACK *pcbPrev;
pcbPrev = WM_SetCallback(WM_HBKWIN, _cbBkWin);
vvv = TEXT_CreateEx(0,0,200,64,WM_HBKWIN,WM_CF_SHOW,0,ID_TEXT_LocalTime,(const char*)DisLocalTime);
TEXT_SetFont(vvv, GUI_FONT_24_1);
TEXT_SetTextColor(vvv,GUI_WHITE);
}
|
最佳答案
查看完整内容
对了,貌似还有个地方,无效化函数WM_InvalidateWindow是用来做重绘的,在调用它之后,被无效化的窗口会收到WM_PAINT消息,就会开始重绘自身。这里你无效化的是text控件,但是实际上需要无效化的应该是桌面窗口。
你可以看看WM_Redraw.c和WM_Sample.c这两个官方例程,都有涉及到桌面窗口的重绘。
|