|
楼主 |
发表于 2017-9-22 10:19:44
|
显示全部楼层
回 eric2013 的帖子
eric2013:我看下你的局部刷新里面刷新了什么,极有可能是操作不过来。 (2017-09-22 01:36)  #include "MainTask.h"
#pragma diag_suppress 870 //编译警告屏蔽
#define ID_CHECKBOX_0 (GUI_ID_USER + 0x30)
#define ID_CHECKBOX_1 (GUI_ID_USER + 0x31)
#define ID_BUTTON_4 (GUI_ID_USER + 0x32)
#define ID_EDIT_1 (GUI_ID_USER + 0x33)
#define ID_BUTTON_5 (GUI_ID_USER + 0x34)
#define ID_FRAMEWIN_2 (GUI_ID_USER + 0x35)
#define ID_TEXT_3 (GUI_ID_USER + 0x36)
#define ID_EDIT_2 (GUI_ID_USER + 0x37)
#define ID_EDIT_3 (GUI_ID_USER + 0x38)
#define ID_TEXT_4 (GUI_ID_USER + 0x39)
#define ID_TEXT_5 (GUI_ID_USER + 0x3A)
#define ID_TEXT_6 (GUI_ID_USER + 0x3B)
WM_HWIN hWinMonitor;
static WM_CALLBACK* _pcbOldFrameSC;
MonitorMeauInfo gsMonitorMeauInfo;
extern char KeypadDisplayData[10]; //小键盘显示数据
extern char NumberData[11]; //数字数据
/*
*********************************************************************************************************
* 对话框GUI_WIDGET_CREATE_INFO类型数组
*********************************************************************************************************
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreateSC[] = {
{ FRAMEWIN_CreateIndirect, "Caption", ID_FRAMEWIN_2, 0, 20, 240, 280, 0, 0},
{ CHECKBOX_CreateIndirect, "Checkbox", ID_CHECKBOX_0, 162, 10, 70, 20, 0, 0x0, 0 },
{ CHECKBOX_CreateIndirect, "Checkbox", ID_CHECKBOX_1, 162, 35, 70, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "读取角度", ID_BUTTON_4, 160, 73, 70, 20, 0, 0},
{ EDIT_CreateIndirect, NULL, ID_EDIT_1, 160, 98, 70, 20, 0, 0},
{ BUTTON_CreateIndirect, "写入角度", ID_BUTTON_5, 160, 123, 70, 20, 0, 0},
{ TEXT_CreateIndirect, "计数:", ID_TEXT_4, 160, 151, 30, 20, 0, 0x64, 0 },
{ EDIT_CreateIndirect, NULL, ID_EDIT_2, 190, 148, 40, 20, 0, 0},
{ TEXT_CreateIndirect, "本车车速:", ID_TEXT_5, 160, 176, 70, 20, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "200", ID_EDIT_3, 160, 198, 40, 20, 0, 0},
{ TEXT_CreateIndirect, "KM/H", ID_TEXT_6, 203, 201, 30, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, NULL, ID_TEXT_3, 160, 223, 70, 97, 0, 0x64, 0 },
};
/*******************************************************************
*
* _cbFrame //框架窗口的回调函数,注意和框架窗口客户端窗口的回调函数区分开。
*/
static void _cbFrameSC(WM_MESSAGE * pMsg)
{
int Id;
switch (pMsg->MsgId)
{
case WM_NOTIFY_PARENT:
if (pMsg->Data.v == WM_NOTIFICATION_RELEASED)
{
Id = WM_GetId(pMsg->hWinSrc);
if (Id == GUI_ID_CLOSE)
{
MEAU_Sel = MainMeau_SEL;
// WM_DeleteWindow(hWinMonitor);
MainMeau();
// MEAU_Sel = MonitorMeau_SEL;
// WM_DeleteWindow(hWinMain);
// MonitorMeau();
}
}
break;
}
if (_pcbOldFrameSC)
{
(*_pcbOldFrameSC)(pMsg);
}
}
/*
*********************************************************************************************************
* 函 数 名: InitDialog1
* 功能说明: 回调函数中的控件初始化消息
* 形 参:pMsg 指针参数
* 返 回 值: 无
*********************************************************************************************************
*/
static void InitDialogSC(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
WM_HWIN hWin = pMsg->hWin;
//
//FRAMEWIN
//
FRAMEWIN_SetFont(hWin,&XBF_Font16);
FRAMEWIN_SetText(hWin,"目标监控"); //设置标题文本
FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER); //设置文字对齐方式
FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0); //关闭按键
FRAMEWIN_SetTitleHeight(hWin,18);
FRAMEWIN_Maximize(hWin);
FRAMEWIN_SetActive(hWin,1);
FRAMEWIN_SetTextColor(hWin,GUI_BLACK);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4);
BUTTON_SetFont(hItem,&XBF_Font12);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5);
BUTTON_SetFont(hItem,&XBF_Font12);
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
EDIT_EnableBlink(hItem,500,1);
EDIT_SetTextAlign(hItem,GUI_TA_HCENTER);
EDIT_SetFont(hItem,&XBF_Font16);
WM_DisableWindow(hItem);
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
TEXT_SetFont(hItem, &XBF_Font12);
TEXT_SetBkColor(hItem,GUI_WHITE);
TEXT_SetDefaultTextColor(GUI_BLACK);
TEXT_SetWrapMode(hItem,GUI_WRAPMODE_CHAR);
WM_DisableWindow(hItem);
hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
CHECKBOX_SetFont(hItem,&XBF_Font12);
CHECKBOX_SetTextColor(hItem,GUI_BLACK);
CHECKBOX_SetText(hItem, "左雷达 ");
CHECKBOX_SetFocusColor(hItem,GUI_DARKBLUE);
CHECKBOX_SetState(hItem,1);
hItem = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_1);
CHECKBOX_SetFont(hItem,&XBF_Font12);
CHECKBOX_SetTextColor(hItem,GUI_BLACK);
CHECKBOX_SetText(hItem, "右雷达 ");
CHECKBOX_SetFocusColor(hItem,GUI_DARKBLUE);
CHECKBOX_SetState(hItem,1);
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_2);
EDIT_EnableBlink(hItem,500,0);
EDIT_SetTextAlign(hItem,GUI_TA_HCENTER);
EDIT_SetFont(hItem,&XBF_Font16);
EDIT_SetDecMode(hItem,0,0,900,0,0);
WM_DisableWindow(hItem);
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_3);
EDIT_EnableBlink(hItem,500,0);
EDIT_SetTextAlign(hItem,GUI_TA_HCENTER);
EDIT_SetFont(hItem,&XBF_Font16);
EDIT_SetDecMode(hItem,0,0,250,0,0);
WM_DisableWindow(hItem);
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
TEXT_SetFont(hItem, &XBF_Font12);
TEXT_SetWrapMode(hItem,GUI_WRAPMODE_CHAR);
WM_DisableWindow(hItem);
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
TEXT_SetFont(hItem, &XBF_Font12);
TEXT_SetWrapMode(hItem,GUI_WRAPMODE_CHAR);
WM_DisableWindow(hItem);
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_6);
TEXT_SetFont(hItem, &XBF_Font12);
TEXT_SetWrapMode(hItem,GUI_WRAPMODE_CHAR);
WM_DisableWindow(hItem);
}
/*
*********************************************************************************************************
* 函 数 名: _cbCallback1
* 功能说明: 回调函数
* 形 参:pMsg 指针参数
* 返 回 值: 无
*********************************************************************************************************
*/
static void _cbCallbackSC(WM_MESSAGE * pMsg)
{
int NCode, Id;
WM_HWIN hWin = pMsg->hWin;
WM_MESSAGE pMsgInfo;
switch (pMsg->MsgId)
{
case WM_PAINT:
if(gsMonitorMeauInfo.nTargetDisplayFlag == 0)
{
TargetDisplayWindowInit();
// gsMonitorMeauInfo.nTargetDisplayFlag = 1;
}
else
{
TargetDisplayWindowInit();
TargetLoad();
}
break;
case WM_INIT_DIALOG:
InitDialogSC(pMsg);
break;
case MSG_SetFigureDisplay:
hWin = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
EDIT_SetText(hWin, KeypadDisplayData);
break;
case MSG_SetENTER:
switch(gsMonitorMeauInfo.WINTOOL_Sel)
{
case 0:
hWin = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
break;
case 1:
hWin = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_1);
break;
case 2:
hWin = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4);
break;
case 3:
hWin = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
break;
case 4:
hWin = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5);
break;
default:
break;
}
pMsgInfo.MsgId = WM_NOTIFY_PARENT; //消息ID
pMsgInfo.hWinSrc = hWin; //源窗口
pMsgInfo.Data.v = WM_NOTIFICATION_CLICKED; //数据值
WM_SendMessage(WM_GetClientWindow(hWinMonitor), &pMsgInfo); //向窗口发送消息,这里是父窗口
break;
/* 设置ICON的聚焦 */
case MSG_SetICONFocus:
switch(gsMonitorMeauInfo.WINTOOL_Sel)
{
case 0:
hWin = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_0);
break;
case 1:
hWin = WM_GetDialogItem(pMsg->hWin, ID_CHECKBOX_1);
break;
case 2:
hWin = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4);
break;
case 3:
hWin = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
break;
case 4:
hWin = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5);
break;
default:
break;
}
WM_SetFocus(hWin);
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_ESCAPE:
GUI_EndDialog(hWin, 1);
break;
case GUI_KEY_ENTER:
GUI_EndDialog(hWin, 0);
break;
}
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (Id)
{
case GUI_ID_OK:
if(NCode==WM_NOTIFICATION_RELEASED)
GUI_EndDialog(hWin, 0);
break;
case GUI_ID_CANCEL:
if(NCode==WM_NOTIFICATION_RELEASED)
GUI_EndDialog(hWin, 0);
break;
case ID_BUTTON_4:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
gsMonitorMeauInfo.DriverType = MonitorMeauTypeChoose();
if((gsMonitorMeauInfo.DriverType == DEVICE_REAR_RADAR_LEFT) || (gsMonitorMeauInfo.DriverType == DEVICE_REAR_RADAR_RIGHT))
{
ReadAngle(gsMonitorMeauInfo.DriverType,pMsg,ID_TEXT_3);//执行读取角度功能函数
}
else
{
hWin = WM_GetDialogItem(hWin, ID_TEXT_3);
TEXT_SetText(hWin,"\\n 请重设: \\n\\n 目标类型");
GUI_Exec();
}
break;
}
break;
case ID_BUTTON_5:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
gsMonitorMeauInfo.DriverType = MonitorMeauTypeChoose();
if((gsMonitorMeauInfo.DriverType == DEVICE_REAR_RADAR_LEFT) || (gsMonitorMeauInfo.DriverType == DEVICE_REAR_RADAR_RIGHT))
{
WriteAngle(gsMonitorMeauInfo.DriverType,pMsg,ID_TEXT_3);//执行写入角度功能函数
}
else
{
hWin = WM_GetDialogItem(hWin, ID_TEXT_3);
TEXT_SetText(hWin,"\\n 请重设: \\n\\n 目标类型");
GUI_Exec();
}
break;
}
break;
default:
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
}
void MonitorMeau(void)
{
gsMonitorMeauInfo.WINTOOL_Sel = 0;
gsMonitorMeauInfo.Key_Sel = 0;
gsMonitorMeauInfo.Minus = 0xAA;
gsMonitorMeauInfo.DecimalPoint = 0xAA;
gsMonitorMeauInfo.nTargetDisplayFlag = 0;
gsMonitorMeauInfo.DataCnt = 0;
hWinMonitor = GUI_CreateDialogBox(_aDialogCreateSC, GUI_COUNTOF(_aDialogCreateSC), &_cbCallbackSC, 0, 0, 0);
_pcbOldFrameSC = WM_SetCallback(hWinMonitor, _cbFrameSC);//通过函数 WM_SetCallback 设置框架窗口的回调函数
}
void MonitorMeauKeyResponse(u8 nValue)
{
WM_MESSAGE pMsgInfo;
WM_HWIN hWin;
switch(nValue)
{
case Num_Up_D: //第一层选择切换、第二层的选择切换
case Num_Left_D:
gsMonitorMeauInfo.WINTOOL_Sel = MonitorMeauTool();
if(gsMonitorMeauInfo.WINTOOL_Sel > 0)
{
gsMonitorMeauInfo.WINTOOL_Sel--;
}
else
{
gsMonitorMeauInfo.WINTOOL_Sel = 4;
}
WM_SendMessageNoPara(WM_GetClientWindow(hWinMonitor), MSG_SetICONFocus);
break;
case Num_Down_D: //第一层选择切换、第二层的选择切换
case Num_Right_D:
gsMonitorMeauInfo.WINTOOL_Sel = MonitorMeauTool();
if(gsMonitorMeauInfo.WINTOOL_Sel < 4)
{
gsMonitorMeauInfo.WINTOOL_Sel++;
}
else
{
gsMonitorMeauInfo.WINTOOL_Sel = 0;
}
WM_SendMessageNoPara(WM_GetClientWindow(hWinMonitor), MSG_SetICONFocus); //向窗口发送无参数的消息,窗口句柄,要发送的消息的ID
break;
case Num_Affirm: //第一层的确定选择
if(gsMonitorMeauInfo.WINTOOL_Sel == 0)
{
GUI_SendKeyMsg(GUI_KEY_SPACE, 1);
}
else if(gsMonitorMeauInfo.WINTOOL_Sel == 1)
{
GUI_SendKeyMsg(GUI_KEY_SPACE, 1);
}
else
{
WM_SendMessageNoPara(WM_GetClientWindow(hWinMonitor), MSG_SetENTER); //向窗口发送无参数的消息,窗口句柄,要发送的消息的ID
}
break;
case Num_Exit: //当前菜单的退出。
hWin = WM_GetDialogItem(hWinMonitor, GUI_ID_CLOSE);
pMsgInfo.MsgId = WM_NOTIFY_PARENT;
pMsgInfo.hWinSrc = hWin;
pMsgInfo.Data.v = WM_NOTIFICATION_RELEASED;
WM_SendMessage(hWinMonitor, &pMsgInfo);
break;
case Num_0:
case Num_1:
case Num_2:
case Num_3:
case Num_4:
case Num_5:
case Num_6:
case Num_7:
case Num_8:
case Num_9:
if(gsMonitorMeauInfo.WINTOOL_Sel == 3)
{
if(gsMonitorMeauInfo.Key_Sel == 8 )
{
break;
}
KeypadDisplayData[gsMonitorMeauInfo.Key_Sel] = NumberData[nValue];
WM_SendMessageNoPara(WM_GetClientWindow(hWinMonitor), MSG_SetFigureDisplay);
gsMonitorMeauInfo.Key_Sel++;
}
break;
case Num_2x2: //小数点
if(gsMonitorMeauInfo.WINTOOL_Sel == 3)
{
if((gsMonitorMeauInfo.Key_Sel == 8) || (gsMonitorMeauInfo.DecimalPoint != 0xAA) || (gsMonitorMeauInfo.Key_Sel == 0))
{
break;
}
if((gsMonitorMeauInfo.Minus != 0xAA) && gsMonitorMeauInfo.Key_Sel == 1)
{
break;
}
KeypadDisplayData[gsMonitorMeauInfo.Key_Sel] = '.';
gsMonitorMeauInfo.DecimalPoint = gsMonitorMeauInfo.Key_Sel;
WM_SendMessageNoPara(WM_GetClientWindow(hWinMonitor), MSG_SetFigureDisplay);
gsMonitorMeauInfo.Key_Sel++;
}
break;
case Num_Asterisk: //负号
if(gsMonitorMeauInfo.WINTOOL_Sel == 3)
{
if((gsMonitorMeauInfo.Key_Sel == 8) || (gsMonitorMeauInfo.Minus != 0xAA)|| (gsMonitorMeauInfo.Key_Sel != 0))
{
break;
}
KeypadDisplayData[gsMonitorMeauInfo.Key_Sel] = '-';
gsMonitorMeauInfo.Minus = gsMonitorMeauInfo.Key_Sel;
WM_SendMessageNoPara(WM_GetClientWindow(hWinMonitor), MSG_SetFigureDisplay);
gsMonitorMeauInfo.Key_Sel++;
}
break;
case Num_Delete: //删除键
if(gsMonitorMeauInfo.WINTOOL_Sel == 3) //当前选择为角度输入文本框时,这些按键才有作用
{
if(gsMonitorMeauInfo.Key_Sel < 1)
{
break;
}
gsMonitorMeauInfo.Key_Sel--;
KeypadDisplayData[gsMonitorMeauInfo.Key_Sel] = NULL;
if(gsMonitorMeauInfo.Minus == gsMonitorMeauInfo.Key_Sel)
{
gsMonitorMeauInfo.Minus = 0xAA;
}
if(gsMonitorMeauInfo.DecimalPoint == gsMonitorMeauInfo.Key_Sel)
{
gsMonitorMeauInfo.DecimalPoint = 0xAA;
}
WM_SendMessageNoPara(WM_GetClientWindow(hWinMonitor), MSG_SetFigureDisplay);
}
break;
case Num_Function: //功能键
if(gsMonitorMeauInfo.nTargetDisplayFlag == 0)
{
gsMonitorMeauInfo.nTargetDisplayFlag = 1;
}
else
{
gsMonitorMeauInfo.nTargetDisplayFlag = 0;
}
break;
default:
break;
}
}
/*********************************************
函数名: int AngleMeauTool(void)
功能: 获取当前聚焦控件的ID
输入: 无
输出: 无
返回值: 当前聚焦控件的ID - 0x810
*********************************************/
int MonitorMeauTool(void)
{
int Id;
WM_HWIN hWin;
hWin = WM_GetFocussedWindow();
Id = WM_GetId(hWin);
Id = Id -0x830;
return Id;
}
u8 MonitorMeauTypeChoose(void)
{
int nFlag1,nFlag2;
nFlag1 = CHECKBOX_GetState(WM_GetDialogItem(WM_GetClientWindow(hWinMonitor), ID_CHECKBOX_0));
nFlag2 = CHECKBOX_GetState(WM_GetDialogItem(WM_GetClientWindow(hWinMonitor), ID_CHECKBOX_1));
GUI_Exec();
if((nFlag1 == 1) && (nFlag2==0))
{
return DEVICE_REAR_RADAR_LEFT;
}
else if((nFlag1 == 0) && (nFlag2 ==1))
{
return DEVICE_REAR_RADAR_RIGHT;
}
else if((nFlag1 == 1) && (nFlag2 ==1))
{
return 0x55;
}
return 0xAA;
}
void TargetDisplayStart(void)
{
u8 nFlag1,nFlag2;
GUI_RECT Rect; //绝对坐标
TargetData* pTargetData;
if(!gsSysTime.TargetUpdade)
{
gsSysTime.TargetUpdade = 50;
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_LEFT];
nFlag1 = pTargetData->UpdateFlag;
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_RIGHT];
nFlag2 = pTargetData->UpdateFlag;
if(nFlag1||nFlag2)
{
Rect.x0 = 11;
Rect.y0 =25;
Rect.y1 = 160;
Rect.y1 = 312;
WM_InvalidateRect(hWinMonitor,&Rect);
// GUI_Exec();
}
}
}
void TargetLoad(void)
{
u8 nType,i,nFlag1,nFlag2;
TargetData* pTargetData;
gsMonitorMeauInfo.DataCnt++;
EDIT_SetValue(WM_GetDialogItem(WM_GetClientWindow(hWinMonitor), ID_EDIT_2), gsMonitorMeauInfo.DataCnt);
EDIT_SetValue(WM_GetDialogItem(WM_GetClientWindow(hWinMonitor), ID_EDIT_3), gsVehicleInfo.Speed/10);
nType = MonitorMeauTypeChoose();
if(nType == DEVICE_REAR_RADAR_LEFT)
{
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_LEFT];
if(pTargetData->UpdateFlag)
{
pTargetData->UpdateFlag = 0;
for(i = 0;i < pTargetData->Cnt;i++)
{
TargetDraw(nType,pTargetData->RadarTargetData.CrossDistance,pTargetData->RadarTargetData.Distance);
}
}
}
else if(nType == DEVICE_REAR_RADAR_RIGHT)
{
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_RIGHT];
if(pTargetData->UpdateFlag)
{
pTargetData->UpdateFlag = 0;
for(i = 0;i < pTargetData->Cnt;i++)
{
TargetDraw(nType,pTargetData->RadarTargetData.CrossDistance,pTargetData->RadarTargetData.Distance);
}
}
}
else if(nType == 0x55)
{
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_LEFT];
nFlag1 = pTargetData->UpdateFlag;
pTargetData->UpdateFlag = 0;
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_RIGHT];
nFlag2 = pTargetData->UpdateFlag;
pTargetData->UpdateFlag = 0;
if(nFlag1||nFlag2)
{
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_LEFT];
for(i = 0;i < pTargetData->Cnt;i++)
{
TargetDraw(DEVICE_REAR_RADAR_LEFT,pTargetData->RadarTargetData.CrossDistance,pTargetData->RadarTargetData.Distance);
}
pTargetData = &gsaTargetData[DEVICE_REAR_RADAR_RIGHT];
for(i = 0;i < pTargetData->Cnt;i++)
{
TargetDraw(DEVICE_REAR_RADAR_RIGHT,pTargetData->RadarTargetData.CrossDistance,pTargetData->RadarTargetData.Distance);
}
}
}
} |
|