emwin的WM_PAINT

 1 //界面实现 2 static void _cbDummy(WM_MESSAGE* pMsg){ 3 int Id, NCode; 4 int hour, min, second, tim; 5  WM_HWIN hWin; 6 char temp[4], temp1[4]; 7 char tim_t[10]; 8 hWin = pMsg->hWin; 9 // create_basePage(); 10 switch (pMsg->MsgId) {11 case WM_CREATE:12 WM_CreateTimer(hWin, 0, 1000, 0);13 break;14 case WM_TIMER:15 WM_RestartTimer(pMsg->Data.v, 1000);16 //时间格式转换17 break;18 case WM_PAINT:19 create_basePage(); //每次都重绘背景和标题20 break;21 22 case WM_NOTIFY_PARENT:23 Id = WM_GetId(pMsg->hWinSrc);24 NCode = pMsg->Data.v;25 switch(Id) {26 case ID_BUTTON_0: //设置27 switch(NCode) {28 case WM_NOTIFICATION_CLICKED:29 break;30 case WM_NOTIFICATION_RELEASED:31 if(controlSet==0) {32 controlSet = 1;33  BUTTON_SetText(setbutton, Font_Back);34 //BUTTON_SetText(setbutton, "返回");35 hWinSet1 = CreateSetWindow();36 BUTTON_SetBitmapEx(setbutton, BUTTON_BI_UNPRESSED, &bmstart1, 32, 2);37 }else {38 controlSet = 0;39  BUTTON_SetText(setbutton, Font_Set);40 //BUTTON_SetText(setbutton, "设置");41  WM_DeleteWindow(hWinSet1);42 BUTTON_SetBitmapEx(setbutton, BUTTON_BI_UNPRESSED, &bmstart, 32, 2);43  }44 break;45  }46 break;47 48 case ID_BUTTON_1: //启动/停止49 switch(NCode) {50 case WM_NOTIFICATION_CLICKED:51 break;52 case WM_NOTIFICATION_RELEASED:53 if(startOrStop==0){54 startOrStop = 1;55 printf("start\n");56 }else {57 startOrStop = 0;58 printf("stop\n");59  }60  invalidStartButton(hWin);61 break;62  }63 break;64  }65 break;66 67 default:68  WM_DefaultProc(pMsg);69 break;70  }71 }72 73 74 WM_HWIN CreateWindow(void) {75 //get_gif(); //显示开机动画76 BUTTON_SetDefaultSkinClassic(); //使用经典皮肤77 hWinBase = WM_CreateWindow(0, 0, 480, 320, WM_CF_SHOW, _cbDummy, 0);78 return hWinBase;79 }

emwin中自己创建窗口,并且将所有的界面都放在WM_PAINT下面,运行定时器的时候,总是卡死,一直找不到原因,最后发现可能是内存不足,找到原因是

create_basePage(); //每次都重绘背景和标题

每次都重绘整个页面然后又没有清除导致内存不足,进行不断的尝试,发现create_basePage();放在WM_PAINT之外,不能画矩形设置背景色,并且按钮的监听也有问题,

最后只能重写,写完之后,WM_PAINT只需要放置画矩形,需要重绘的控件就能实现功能,并且也不会内存不足,引以为戒!

case WM_PAINT: GUI_Clear(); GUI_DrawGradientV(0, 0, LCD_GetXSize(), LCD_GetYSize(), GUI_LIGHTGREEN, 0x71B33C); //渐变色填充 GUI_SetPenSize(1); //画笔像素 1 GUI_SetColor(GUI_BLACK); //画笔颜色黑色 GUI_DrawRect(1, 1, 388, 52); //绘制矩形 //画边框 GUI_DrawRect(388, 70, 478, 250); //告警栏 GUI_DrawRect(388, 125, 478, 184); //频率显示栏 GUI_DrawRect(1, 52, 388, 270); //数据显示栏 GUI_DrawRect(1, 270, 388, 318); //数据显示分栏 GUI_DrawRect(126, 270, 252, 318); //画启动框 //GUI_DrawRect(388, 220, 479, 319); //重绘 //重绘倒计时 if(strlen(time_buffer)==0 || !strcmp(time_buffer, "00:00:00")){ TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_7), "00:00:00"); }else { controlTime = 1; TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_7), time_buffer); }

 

相关文章