|

楼主 |
发表于 2018-4-18 11:23:50
|
显示全部楼层
/*********************************************************************
*
* _cbBkWindow
*
**********************************************************************
*/
static void _cbBkWindow(WM_MESSAGE * pMsg) {
PARAM Param; /* PARAM類型變量 */
uint8_t i;
int NCode;
int Id;
WM_HWIN hDateTime;
switch (pMsg->MsgId) {
case WM_PAINT:
/* 第1步:繪製背景與背景文字 *******************************************************************************************/
paint();
/* 第2步:繪製 Temperaturer 相關*************************************************************************/
GUI_SetColor(GUI_WHITE);
for(i=0;i<TEMPBar;i++)
{
Param.Angle= (Data.WirelessTemp<=1) ? 210 : 210-Data.WirelessTemp; // Param.Angle= 210-rand()%240;
if ( i <3 ){
Param.CenterPoint.x= LCD_GetXSize() /6*i + LCD_GetXSize()/6/2 - 10*i;
Param.CenterPoint.y= 30+(LCD_GetYSize()-60) /3;
}
else{
Param.CenterPoint.x= LCD_GetXSize() /6*(i-3) + LCD_GetXSize()/6/2 - 10*(i-3);
Param.CenterPoint.y= 40+(LCD_GetYSize()-60) /4*3;
}
Draw_Temperature(& aram,i,temp_select(Data.WirelessTemp,i));
}
break;
case WM_TIMER:
WM_RestartTimer(pMsg->Data.v,1000); //重新匯入1秒更新
WM_InvalidateWindow(hWin); //刪除舊窗口
break;
default:
WM_DefaultProc(pMsg);
}
}
void MainTask(void) {
/* 第1步:顯示滑鼠,設定小工具皮膚 *************************************************************************/
GUI_CURSOR_Show();
SetDefaultSkin();
/* 第2步:刷新畫面 *****************************************************************************************/
GUI_SetBkColor(GUI_BLACK);
GUI_Clear();
/* 第3步:SetCallback *************************************************************************************/
WM_SetCallback(WM_HBKWIN, &_cbBkWindow); /* Set window Callback */
WM_CreateTimer(WM_HBKWIN, 0, 1000, 0); //每一秒刷新
}
目前是利用 WM_CreateTimer 去每秒刪除舊窗口 WM_InvalidateWindow(hWin)
而執行 _cbBkWindow 的 WM_PAINT ,造成 屏幕的每秒刷新
_cbBkWindow 的第2步 就是利用感測器的溫度值 Data.WirelessTemp 來畫溫度圓餅圖
我在想是否我可以判別 Data.WirelessTemp 的值如果有改變我再去 觸發 WM_PAINT (但要怎麼觸發? 我只知道 刪除舊窗口..)
我知道有個辦法就是把螢幕切成好幾個視窗
例如: 溫度圓餅圖 用一個小視窗 去每秒刪除舊窗口 ; ( 不一定要每秒都刷新,而是溫度值改變再刷新)
熱影像 用一個小視窗 去每秒刪除舊窗口 ; ( 一定要每秒都刷新 )
系統時間 用一個小視窗 去每秒刪除舊窗口 ; ( 一定要每秒都刷新 )
這樣會不會更浪費效率呀?
附上: 目前屏幕主畫面
目前屏幕主畫面
會這樣問是因為每秒刷新整個屏幕實在很費效率,目前還要顯示熱影像攝像頭跟每秒儲存資訊到SD卡還有將資料透過網路傳輸到監控電腦,如果使用者按下分析鈕還要畫曲線圖,在無系統(裸機)的情況下
好像忙不過來,沒辦法多工處理...(不知道是不是我寫的太爛 )
|
|