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); }