|
第一次使用emwin,今天在调代码过程中发现WM_PAINT在每次更新事件中会被多次触发。现象:在WM_PAINT加了一段串口打印函数,发现在WM_InvalidateWindow(hWin) 重绘窗口后打印了多次数据。这是否正常?
另外用定时器刷新TEST文本控件时,定时器没触发一次 WM_PAINT 也会触发多次?虽然现在不影响显示效果,但是心里感觉不踏实
static void _cbICONVIEW(WM_MESSAGE* pMsg)
{
WM_HWIN hWin = pMsg->hWin;
WM_HWIN ICONVIEW_hItem;
static char Ctrlsel=1;
switch (pMsg->MsgId)
{
case WM_CREATE:
WM_SetFocus(hWin); /* 创建后设置聚焦 */
ICONVIEW_hItem = ICONVIEW_CreateEx(0, 00, 320, 200,
hWin, WM_CF_SHOW | WM_CF_HASTRANS ,
ICONVIEW_CF_AUTOSCROLLBAR_V, GUI_ID_ICONVIEW0, 85, 85);
ICONVIEW_SetIconAlign(ICONVIEW_hItem, ICONVIEW_IA_TOP); //设置对齐
ICONVIEW_SetTextColor(ICONVIEW_hItem, ICONVIEW_CI_UNSEL, GUI_BLACK); //设置标签文字 颜色(未选中时候)
ICONVIEW_SetTextColor(ICONVIEW_hItem, ICONVIEW_CI_SEL, GUI_WHITE); //设置标签文字 颜色( 选中时候)
ICONVIEW_SetFrame(ICONVIEW_hItem, GUI_COORD_X, 20); //设置图标到IconView边框的间距
ICONVIEW_SetFrame(ICONVIEW_hItem, GUI_COORD_Y, 15);
ICONVIEW_SetSpace(ICONVIEW_hItem, GUI_COORD_X, 5); //设置图标和图标之间的间距
ICONVIEW_SetSpace(ICONVIEW_hItem, GUI_COORD_Y, 5);
ICONVIEW_SetFont(ICONVIEW_hItem, GUI_FONT_16_1);
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "AdjData");//添加图标项
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "Other");
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "Record");
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "Alarm");
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "System");
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "Rest");
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "Bat");
ICONVIEW_AddBitmapItem(ICONVIEW_hItem, &bmAdjData, "Time");
ICONVIEW_SetBkColor(ICONVIEW_hItem, ICONVIEW_CI_SEL, UI_HeadColor| 0xF0000000); //设置选中小图标 颜色
ICONVIEW_SetBkColor(ICONVIEW_hItem, ICONVIEW_CI_BK, UI_BackColor); //设置小图标框区域背景颜色
ICONVIEW_SetSel(ICONVIEW_hItem ,0);
WM_SetFocus(ICONVIEW_hItem); /* 创建后设置聚焦 */
break;
case WM_PAINT:
_PaintFrame();
GUI_SetBkColor(UI_BackColor); //设置背景色
GUI_Clear();
GUI_DrawGradientH(0, 200, 320, 220,UI_HeadColor , UI_HeadColor ); //设置底部横条
ICONVIEW_SetSel(ICONVIEW_hItem ,Ctrlsel);
printf("Ctrlsel=%d\n",Ctrlsel);
break;
case MSG_UP:
Ctrlsel++;
//ICONVIEW_SetSel(ICONVIEW_hItem ,Ctrlsel);
// WM_SetFocus(ICONVIEW_hItem); /* 创建后设置聚焦 */
printf("Ctrlsel=%d\n",Ctrlsel);
WM_InvalidateWindow(hWin); //重绘窗口
break;
case MSG_DOWN:
Ctrlsel--;
printf("Ctrlsel=%d\n",Ctrlsel);
WM_InvalidateWindow(hWin); //重绘窗口
break;
case MSG_Delect:
_DeleteFrame();
_CreateFrame(&_cbWindow1);
break;
case MSG_Enter:
break;
default:
WM_DefaultProc(pMsg);
}
}
|
|