⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpstestview.cpp

📁 广宇GPS系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
void CGpsTestView::OnButtonPathstop() 
{
	// TODO: Add your command handler code here
	if (m_bIsRuning)
	{		
		m_bIsRuning = FALSE;
		ExitPathThread();
		if (nTimerSendSms != -1)
		{
			KillTimer(nTimerSendSms);
			nTimerSendSms = -1;
		}
		if (nTimerFlash != -1)
		{
			KillTimer(nTimerFlash);
			nTimerFlash = -1;
		}
		nCurrentPointNum = 0;
		m_bRecvQJ = FALSE;
//----------------此函数有问题-------------------
		ErasePathLine();
//		MessageBox("模拟结束...\r\n", "提示信息", MB_ICONWARNING);
	}
}

//-----------------------------------------------
DWORD WINAPI CGpsTestView::PathRunThreadEntry(LPVOID lpParam)
{
	CGpsTestView *view = (CGpsTestView *)lpParam;
	view->PathThreadProc();
	return 0;
}

//-----------------------------------------------
int CGpsTestView::PathThreadProc()
{
	BOOL  bDirection = TRUE;
	BOOL  bCheckEnd = FALSE;
	DWORD dwStart = GetTickCount();
	int nMax = m_smsRunArray.GetUpperBound();
	nCurrentPointNum = 0;
	CarAlarm();
	while (TRUE) 
	{
		if (GetTickCount() - dwStart >= 30000)
		{
			dwStart = GetTickCount();
			if (bDirection)
			{	
				nCurrentPointNum++;
				if (!bCheckEnd)
					CheckStatus(nCurrentPointNum);
				if (nCurrentPointNum == nMax)
				{
					bDirection = FALSE;
					bCheckEnd = TRUE;
				}
			}
			else
			{
				nCurrentPointNum--;
				if (nCurrentPointNum == 0)
					bDirection = TRUE;
			}
			
			int nAlarm = CarAlarm();
		}

		if (m_dwBStart != 0)
		{
			if (GetTickCount() - m_dwBStart >= 120000)
			{
				m_dwBStart = GetTickCount();
				if (!m_bRecvQJ)
				{
					int nRet = SendReplaySms("00000000", "BJ", TRUE);
					if (nRet != 0)
					{
						MessageBox("发送报警信息错误...\r\n", "警告信息", MB_ICONWARNING);
					}
				}
			}
		}

		Sleep(1);
	}

	return 0;
}

//-----------------------------------------------
int CGpsTestView::ExitPathThread()
{
	TerminateThread(m_hPathThread, -1);
	CloseHandle(m_hPathThread);
	m_hPathThread = NULL;
	m_dwPathThread = 0;

	return 0;
}

//-----------------------------------------------
int CGpsTestView::StrtoHex(CString str)
{
	int n;
	char cTemp[100], chTemp;
	
	n = 0;
	ZeroMemory(cTemp,sizeof(cTemp));
	sprintf(cTemp, "%s", str);
	for (UINT i=0; i < strlen(cTemp); i++)
	{
		chTemp = Char2Hex(cTemp[i]);
		n = n*16 + chTemp;
	}
	
	return n;
}

//-----------------------------------------------
int CGpsTestView::SendReplaySms(CString strSN, CString strCmdWord, BOOL bAlarm, int nCount/* =-1 */, int nInterval/* =0 */)
{
	CString str;
	CString strContent;
	CString strPara1, strPara2, strPara3, strStatus;
	sms_content *cont;
	COleDateTime cDate;
	
	strPara1 = _T("");
	strContent = "*," + strSN + "," + strCmdWord;
	if (nCount != -1) 	
		strPara1.Format(",%.4x,%.4x", nCount, nInterval);
	strContent += strPara1;
	
	cDate = COleDateTime::GetCurrentTime();
	strPara2.Format(",A,%.2x%.2x%.2x,%.2x%.2x%.2x", 
				cDate.GetYear()-2000, cDate.GetMonth(),cDate.GetDay(), 
				cDate.GetHour(), cDate.GetMinute(), cDate.GetSecond());
	strContent += strPara2;

	cont = m_smsRunArray.GetAt(nCurrentPointNum);
	strPara3.Format(",%.8x,%.8x,%.4x,%.4x,", cont->nLatitude, cont->nLongitude, cont->nSpeed, cont->nCourse);
	strContent += strPara3;
	strStatus = cont->strStatus;
	if (bAlarm)
	{
		str = strStatus.Left(8);
		str += m_strAlarmStatus;
		strContent += str;
	}
	else
		strContent += strStatus;

	GetCenterNum();
//	ASSERT(m_pMotoG18->CheckCommIsOpen() == 1);
	short n = m_pMotoG18->SendSms(m_strCenterNum, strContent, 5);
	if (n != 0)
	{
		MessageBox("短信发送失败!\r\n", "错误提示", MB_ICONWARNING);
		return -1;
	}

	return 0;
}

//-----------------------------------------------
void CGpsTestView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch (nIDEvent) 
	{
		case TIMER_SENDSMS:
			{
				SendSms();
			}
			break;
		case TIMER_FLASH:
			{
				if (!m_bDrowPoint)
				{
					EraseFlashPoint();
					m_bDrowPoint = TRUE;
				}
				else
				{
					PointFlash(nCurrentPointNum);
					m_bDrowPoint = FALSE;
				}
			}
			break;
		case TIMER_CHECKCAR:
			{
				int i;
				CCar *car;
				CString  strMsg;
				for(i=0; i<=m_carArray.GetUpperBound(); i++)
				{
					if (static_cast<CCar *>(m_carArray.GetAt(i))->m_bAlarm)
					{
						car = m_carArray.GetAt(i);
						DWORD dwtime;
						dwtime = GetTickCount();
						if (!car->m_bAlwaysAlarm)
						{
							car->dwBJtime = dwtime;
							car->m_bAlwaysAlarm = TRUE;
							strMsg = CreateMessage(car, "00000000", "BJ", TRUE);
							int nRet = SendCarData(car->m_strPhoneNum, strMsg);
						}
					}
				
					if (static_cast<CCar *>(m_carArray.GetAt(i))->m_bAlwaysAlarm)
					{
						car = m_carArray.GetAt(i);
						DWORD dwAtime;
						dwAtime = GetTickCount();
						if ((dwAtime - car->dwBJtime) > 30000)
						{
							car->dwBJtime = dwAtime;
							strMsg = CreateMessage(car, "00000000", "BJ", TRUE);
							int nRet = SendCarData(car->m_strPhoneNum, strMsg);
							car->m_bAlarm = FALSE;
							car->m_bAlwaysAlarm = FALSE;
							car->m_strStatus = "000000000000";
						}
					}
				

					if (static_cast<CCar *>(m_carArray.GetAt(i))->m_bUnderWatch)
					{
						car = m_carArray.GetAt(i);
						DWORD dwCurrentTime;
						dwCurrentTime = GetTickCount();
						if (car->nLeftCount > 0)
						{
							if ((dwCurrentTime-car->dwStart) > (DWORD)(car->nInterval*1000))
							{
								if (car->nLeftCount != 65535)
									car->nLeftCount--;
								car->dwStart = dwCurrentTime;
								int nRet = SendDwData(car);
							}							
						}
					}
				}
			}
			break;
	}
	CView::OnTimer(nIDEvent);
}

//-----------------------------------------------
int CGpsTestView::SendSms()
{
	UINT nCount, nInterval;
	int nSendResult;
	GetSmsContent();
	nCount	  = atoi(m_strDwCount);
	nInterval = atoi(m_strDwInterval);
	
	if (nCount == 0)
	{
		KillTimer(nTimerSendSms);
		nTimerSendSms = -1;
	}
	else if (nCount == 65535)
	{
		nSendResult = SendReplaySms(m_strDwSN, m_strCmdWord, FALSE, nCount, nInterval);
		if (nSendResult != 0)
		{
			KillTimer(nTimerSendSms);
			nTimerSendSms = -1;
			MessageBox("回复定位信息错误...\r\n", "警告信息", MB_ICONWARNING);
			return -1;
		}
	}
	else
	{
		nCount--;
		nSendResult = SendReplaySms(m_strDwSN, m_strCmdWord, FALSE, nCount, nInterval);
		if (nSendResult != 0)
		{
			KillTimer(nTimerSendSms);
			nTimerSendSms = -1;
			MessageBox("回复定位信息错误...\r\n", "警告信息", MB_ICONWARNING);
			return -1;
		}
		m_strDwCount.Format("%d", nCount);
		SetSmsContent();
	}
	
	return 0;
}

//-----------------------------------------------
int CGpsTestView::CheckStatus(int nPointNum)
{
	int nAStatus, nBStatus;
	CString str;
	CString strStatus;
	sms_content *cont;

	GetAlarmStatus();
	nAStatus = StrtoHex(m_strAlarmStatus);
	cont = m_smsRunArray.GetAt(nPointNum);
	strStatus = cont->strStatus;
	str = strStatus.Right(4);
	nBStatus = StrtoHex(str);
	m_strAlarmStatus.Format("%.4x", nAStatus|nBStatus);
//	SetAlarmStatus();

	return 0;
}

//-----------------------------------------------
int CGpsTestView::CarAlarm()
{	
//	GetAlarmStatus();
	if (strcmp(m_strAlarmStatus, "0000") == 0)
	{
		m_strAstatus = m_strAlarmStatus;
		m_bRecvQJ = TRUE;
		return -1;
	}
	if (strcmp(m_strAlarmStatus, m_strAstatus) != 0)
	{
		m_strAstatus = m_strAlarmStatus;
		m_dwBStart = GetTickCount();
		m_bRecvQJ = FALSE;
		int nRet = SendReplaySms("00000000", "BJ", TRUE);
		if (nRet != 0)
		{
			MessageBox("发送报警信息错误...\r\n", "警告信息", MB_ICONWARNING);
			return -2;
		}
	
	}

	return 0;
}

//-----------------------------------------------
int CGpsTestView::CreatePathLine()
{
	CMapXFeature newobj;
	CMapXPoints pts;
	CMapXLayer lyr;
	CMapXPoint pt;
	VARIANT vtPt;
	double x=0.0, y=0.0;
	if(!newobj.CreateDispatch(newobj.GetClsid())) 
	{
		TRACE0("Failed to create Feature object");
		return -1;
	}
	if(!pts.CreateDispatch(pts.GetClsid())) 
	{
		TRACE0("Failed to create Points collection");
		return -1;
	}
	if(!pt.CreateDispatch(pt.GetClsid())) 
	{
		TRACE0("Failed to create Point object");
		return -1;
	}
	
	try 
	{
		sms_content *cont;
		newobj.Attach(m_ctrlMapX.GetDispatch());
		newobj.SetType(miFeatureTypeLine);
		// Use the map's default symbol style
		newobj.SetStyle(m_ctrlMapX.GetDefaultStyle());
		for (int i=0; i<m_smsRunArray.GetSize(); i++)
		{
			cont = m_smsRunArray.GetAt(i);
			x = ((double)cont->nLongitude) / 600000;
			y = ((double)cont->nLatitude) / 600000;
			pt.Set(x, y);
			pts.Add(pt);
		}
		
		vtPt.vt = VT_DISPATCH;
		vtPt.pdispVal = pts.m_lpDispatch;
		newobj = m_ctrlMapX.GetFeatureFactory().CreateLine(vtPt);		
		//newobj.GetParts().Add(pts);
		lyr = m_ctrlMapX.GetLayers().Item("Point Layer");
		ft = lyr.AddFeature(newobj);
//		lyr.SetKeyField("State");
//		ft.SetKeyValue("running");
//		ft.Update(TRUE);
		//lyr.Refresh();
		// obj will be the newly added object
	} catch (COleDispatchException *e) {
		e->ReportError();		
		e->Delete();
	} catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}	

	return 0;
}

//-----------------------------------------------
void CGpsTestView::ErasePathLine()
{
//	CMapXFeature ft;
	CMapXLayer lyr;
	sms_content *contbef;
	try 
	{
		lyr = m_ctrlMapX.GetLayers().Item("Point Layer");
		lyr.DeleteFeature(ft.GetFeatureID());
		lyr.Refresh();
		EraseFlashPoint();

		for (int i=0; i<m_smsRunArray.GetSize(); i++)
		{
			contbef = m_smsRunArray.GetAt(i);
			ASSERT(contbef);
			delete contbef;
		}
		m_smsRunArray.RemoveAll();
	} catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	} catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}

//-----------------------------------------------
void CGpsTestView::PointFlash(int nPointNum)
{
	sms_content *cont;
	CMapXFeature ft;
	CMapXPoint pt;
	CMapXLayer lyr;
	CMapXStyle style;
	double x, y;

	if(!pt.CreateDispatch(pt.GetClsid())) 
	{
		TRACE0("Failed to create Point object");
		return;
	}
	if(!style.CreateDispatch(style.GetClsid()))
	{
		TRACE0("Failed to create Style object");
		return;
	}	
	try
	{
		cont = m_smsRunArray.GetAt(nPointNum);
		x = ((double)cont->nLongitude) / 600000;
		y = ((double)cont->nLatitude) / 600000;
		pt.Set(x, y);

		lyr = m_ctrlMapX.GetLayers().Item("Flash Layer");
		style = lyr.GetStyle();

		VARIANT vart,sty;
		vart.vt = VT_DISPATCH;
		vart.pdispVal = pt;	
		sty.vt = VT_DISPATCH;
		sty.pdispVal = style;
		
		ft = m_ctrlMapX.GetFeatureFactory().CreateSymbol(vart,sty);
		ft = lyr.AddFeature(ft);
//		lyr.SetKeyField("State");
//		ft.SetKeyValue("BMW-V");
//		ft.Update(TRUE);
	} catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	} catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}	
}

//-----------------------------------------------
void CGpsTestView::EraseFlashPoint()
{
//	CMapXFeature ft;	
	CMapXFeatures fts;
	CMapXLayer lyr;
	long i;
	try 
	{	
		lyr = m_ctrlMapX.GetLayers().Item("Flash Layer");
		fts = lyr.AllFeatures();

		for (i=fts.GetCount(); i>0; i--)
		{
			//ft = fts.Item(i);
			lyr.DeleteFeature(fts.Item(i).GetFeatureID());
		}
		lyr.Refresh();
	} catch (COleDispatchException *e) {
		e->ReportError();
		e->Delete();
	} catch (COleException *e) {
		e->ReportError();
		e->Delete();
	}
}























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -