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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM