|

楼主 |
发表于 2018-4-17 13:32:06
|
显示全部楼层
eric2013您好: 有點亂,再麻煩你了。謝謝~
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "Window", ID_FRAMEWIN_0, 0, 0, 480,272, 0, 0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 355, 193, 80, 36, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button1",ID_BUTTON_1, 44, 207,100,29, 0,0},
// USER START (Optionally insert additional widgets)
// USER END
};
// USER START (Optionally insert additional static code)
// USER END
/*********************************************************************
*
* _FramewinDrawSkin
*/
static int _DrawSkin(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) {
switch (pDrawItemInfo->Cmd) {
case WIDGET_ITEM_GET_BORDERSIZE_T: //視窗頂上邊框大小
return Desk_FRAMEWIN_BORDERSIZE_T;
case WIDGET_ITEM_GET_BORDERSIZE_B: //視窗頂下邊框大小
return Desk_FRAMEWIN_BORDERSIZE_B;
case WIDGET_ITEM_GET_BORDERSIZE_L: //視窗頂左邊框大小
return Desk_FRAMEWIN_BORDERSIZE_L;
case WIDGET_ITEM_GET_BORDERSIZE_R: //視窗頂右邊框大小
return Desk_FRAMEWIN_BORDERSIZE_R;
case WIDGET_ITEM_GET_RADIUS: //視窗頂圓角半徑
return Desk_FRAMEWIN_RADIUS;
default:
return FRAMEWIN_DrawSkinFlex(pDrawItemInfo);
}
}
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hWin;
int NCode;
int Id;
int data_buffer_block;
static GUI_MEMDEV_Handle pic;
// USER START (Optionally insert additional variables)
// USER END
hWin = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
FRAMEWIN_SetTitleVis(hWin,0);
//pic = GUI_MEMDEV_CreateEx(0, 0, 480 , 272 , GUI_MEMDEV_NOTRANS);
break;
case WM_KEY:
data_buffer_block = 0;
break;
case WM_TOUCH:
data_buffer_block = 0;
break;
case WM_SET_FOCUS:
Id = WM_GetId(pMsg->hWinSrc); // 取得來源窗口ID
Id++;
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); // 取得來源窗口ID
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_LOST_FOCUS:
hWin = WM_GetFocussedWindow();
hWin++;
break;
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
Monitor_fg = 0; //關閉讀取jpeg圖檔模式
//GUI_MEMDEV_Delete(pic); //釋放儲存空間
GUI_EndDialog(pMsg->hWin,0); //結束對話框,窗口管理器在刪除窗口時會自動連帶刪除与其相關的定時器
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
case WM_PAINT: //重繪背景
//data_buffer_block = mjpegdec_decode((u8*)MEM_Buffer[Jpeg_Read_Ptr],Jpeg_Len[Jpeg_Read_Ptr],GUI_MEMDEV_GetDataPtr(pic));
pic = GUI_MEMDEV_CreateEx(0, 0, 480 , 272 , GUI_MEMDEV_NOTRANS);
data_buffer_block = mjpegdec_decode((u8*)pic1,33400,GUI_MEMDEV_GetDataPtr(pic));
if(data_buffer_block == 2){ //jpeg解碼異常
Rx_End_fg = 0;
}
GUI_MEMDEV_Write(pic);
GUI_MEMDEV_Delete(pic); //釋放儲存空間
Mem_Buffer_Len[Jpeg_Read_Ptr] = 0; //顯示完成,清除Mem_Buffer長度,釋放空間。
if(Jpeg_Read_Ptr<MEM_buffer_block-1){Jpeg_Read_Ptr++;} //指向下一張圖。
else{Jpeg_Read_Ptr = 0;}
GUI_SetTextMode(GUI_TM_TRANS);
GUI_SetColor(0xff0000);
GUI_SetFont(&GUI_Font24B_ASCII);
GUI_DispStringAt("0<T<5",125,20);
GUI_DispStringAt("5<T<10",125,35);
GUI_DispStringAt("10<T<15",125,50);
GUI_DispStringAt("15<T<20",125,65);
GUI_DispStringAt("20<T<25",125,80);
GUI_DispStringAt("25<T<30",125,95);
GUI_DispStringAt("30<T<35",125,110);
GUI_DispStringAt("35<T<40",125,125);
GUI_DispStringAt("40<T<45",125,140);
GUI_DispStringAt("45<T<50",125,155);
GUI_DispStringAt("50<T<55",125,170);
GUI_DispStringAt("55<T<100",125,185);
GUI_DispDecAt(test,200,5,10);
GUI_DispDecAt(Time_5s_cnt,230,20,10);
GUI_DispDecAt(Time_10s_cnt,230,35,10);
GUI_DispDecAt(Time_15s_cnt,230,50,10);
GUI_DispDecAt(Time_20s_cnt,230,65,10);
GUI_DispDecAt(Time_25s_cnt,230,80,10);
GUI_DispDecAt(Time_30s_cnt,230,95,10);
GUI_DispDecAt(Time_35s_cnt,230,110,10);
GUI_DispDecAt(Time_40s_cnt,230,125,10);
GUI_DispDecAt(Time_45s_cnt,230,140,10);
GUI_DispDecAt(Time_50s_cnt,230,155,10);
GUI_DispDecAt(Time_55s_cnt,230,170,10);
GUI_DispDecAt(Time_1m_cnt,230,185,10);
/*
data_buffer_block = mjpegdec_decode((u8*)pic1,33400,GUI_MEMDEV_GetDataPtr(pic));
if(data_buffer_block == 2){ //jpeg解碼異常
Rx_End_fg = 0;
}
if(Rx_End_fg){
Rx_End_fg = 0;
//mjpegdec_decode(Jpeg_DatStr,JpegData_Len,GUI_MEMDEV_GetDataPtr(pic));
//GUI_MEMDEV_Write(pic);
}
GUI_MEMDEV_Write(pic);
GUI_SetTextMode(GUI_TM_TRANS); //
GUI_SetColor(0xff0000);
GUI_SetFont(&GUI_Font24B_ASCII);
//GUI_DispStringAt(Calendar_Mem,150,20); //顯示字串
GUI_DispDecAt(test,200,60,10);
*/
break;
case WM_TIMER:
Id = WM_GetTimerId(pMsg->Data.v);
switch(Id){
case Comm_TX_Timer: //固定時間發送命令(每1.5s)
if(DMA_Tx_Stop_fg){
WM_RestartTimer(pMsg->Data.v, Buffer_HalfFull_Delay_Time); //DMA buffer半滿(
}
else{
//GPIO_ToggleBits(GPIOB,GPIO_Pin_7);
WM_RestartTimer(pMsg->Data.v, Buffer_Normal_Delay_Time); //DMA buffer正常
Modbus_Comm_Num = 0;
TCP_TX_Prg(); //發出請求圖檔命令至主機,更新圖片
DMA_Tx_Stop_fg = 1;
}
break;
case Data_Combin_Timer: //固定時間判斷接收是否完成
//GPIO_ToggleBits(GPIOB,GPIO_Pin_7);
/*
if(Jpeg_Combin_prg()){
//Jpeg_Combin_prg();
if(Mem_Buffer_Len[Jpeg_Read_Ptr] != 0){ //
WM_InvalidateWindow(hWin); //通知窗口管理器,此窗口無效,重新繪制窗口。
}
} */
if(DMA_Rx_Stop_fg){
DMA_Rx_Stop_fg = 0 ;
WM_InvalidateWindow(hWin); //通知窗口管理器,此窗口無效,重新繪制窗口。
}
WM_RestartTimer(pMsg->Data.v, Data_Chk_Delay_Time);
break;
default:
break;
//WM_InvalidateWindow(hWin); //通知窗口管理器,此窗口無效,重新繪制窗口。
}
break;
case WM_USER:
WM_RestartTimer(pMsg->Data.v, 30);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* CreateWindow
*/
void MT_Screen_Startup(WM_HWIN hWin, unsigned short int xpos, unsigned short int ypos){
WM_HWIN hItem;
hItem = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, 0, 0, 0);
FRAMEWIN_SetSkin(hItem, _DrawSkin); //該視窗加入換膚回調函數
WM_CreateTimer(WM_GetClientWindow(hItem), Comm_TX_Timer, Buffer_Normal_Delay_Time, 0);
WM_CreateTimer(WM_GetClientWindow(hItem), Data_Combin_Timer, Data_Chk_Delay_Time, 0); //接收資料處理程式每30ms檢查一次。
}
|
|