www.pudn.com > GpsTracker2.rar > GpsTrackerView.cpp


// GpsTrackerView.cpp : implementation of the CGpsTrackerView class 
// 
 
#include "stdafx.h" 
#include "GpsTracker.h" 
 
#include "GpsTrackerDoc.h" 
#include "GpsTrackerView.h" 
#include "Serial.h" 
#include "GpsDlg.h" 
#include "Odb2Dlg.h" 
 
#include  
#include  
#include  
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CGpsTrackerView 
CSerial Serial; 
CGpsDlg gpsdlg; 
COdb2Dlg odb2dlg; 
 
IMPLEMENT_DYNCREATE(CGpsTrackerView, CView) 
 
BEGIN_MESSAGE_MAP(CGpsTrackerView, CView) 
	//{{AFX_MSG_MAP(CGpsTrackerView) 
	ON_WM_TIMER() 
	ON_COMMAND(ID_START, OnStart) 
	ON_COMMAND(ID_STOP, OnStop) 
	ON_COMMAND(ID_ZOOMIN, OnZoomin) 
	ON_COMMAND(ID_ZOOMOUT, OnZoomout) 
	ON_COMMAND(ID_GPS, OnGps) 
	ON_COMMAND(IDM_GPS_INFO, OnGpsInfo) 
	ON_WM_CREATE() 
	ON_COMMAND(IDM_ODB2_INFO, OnOdb2Info) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CGpsTrackerView construction/destruction 
 
CGpsTrackerView::CGpsTrackerView() 
{ 
	// TODO: add construction code here 
	m_x = 0; 
	m_y = 0; 
	m_radius = 6; 
	m_Zoom = false; 
} 
 
CGpsTrackerView::~CGpsTrackerView() 
{ 
} 
 
BOOL CGpsTrackerView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CGpsTrackerView drawing 
 
void CGpsTrackerView::OnDraw(CDC* pDC) 
{ 
	CGpsTrackerDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	// TODO: add draw code for native data here 
	CBitmap bitmap; 
	CDC dcMemory; 
	CPen *pOldPen; 
	CBrush *pOldBrush; 
 
    if(m_Zoom == false)//ȡȫͼ 
	{ 
		bitmap.LoadBitmap(IDB_BITMAP1); 
		dcMemory.CreateCompatibleDC(pDC); 
		dcMemory.SelectObject(&bitmap); 
	    pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//	    CPen *pOldPen; 
	    CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	    pOldPen = pDC->SelectObject(&Pen); 
 
//	    CBrush *pOldBrush; 
	    CBrush Brush(RGB(255,0,0)); 
		pOldBrush = pDC->SelectObject(&Brush); 
//	    pDC->SelectObject(&Brush); 
	    pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
			m_x+m_radius,m_y+m_radius); 
 
//	    pDC->SelectObject(&pOldPen); 
//	    pDC->SelectObject(&pOldBrush); 
	} 
	else if(m_Zoom == true) 
	{ 
		if((m_x >= 0 && m_x < 213) 
			&& (m_y >= 0 && m_y < 141))//ȡͼa 
		{ 
			m_x = 3*m_x; 
			m_y = 3*m_y; 
 
			bitmap.LoadBitmap(IDB_BITMAP2); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//	        CBrush *pOldBrush; 
			CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 213 && m_x < 427) 
			&& (m_y >= 0 && m_y < 141))//ȡͼb 
		{ 
			m_x = 3*(m_x-213); 
			m_y = 3*m_y; 
 
			bitmap.LoadBitmap(IDB_BITMAP3); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 427 && m_x <= 640) 
			&& (m_y >= 0 && m_y < 141))//ȡͼc 
		{ 
			m_x = 3*(m_x-427); 
			m_y = 3*m_y; 
 
			bitmap.LoadBitmap(IDB_BITMAP4); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 0 && m_x < 213) 
			&& (m_y >= 141 && m_y < 283))//ȡͼd 
		{ 
			m_x = 3*(m_x-0); 
			m_y = 3*(m_y-141); 
 
			bitmap.LoadBitmap(IDB_BITMAP5); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 213 && m_x < 427) 
			&& (m_y >= 141 && m_y < 283))//ȡͼe 
		{ 
			m_x = 3*(m_x-213); 
			m_y = 3*(m_y-141); 
 
			bitmap.LoadBitmap(IDB_BITMAP6); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 427 && m_x <= 640) 
			&& (m_y >= 141 && m_y < 283))//ȡͼf 
		{ 
			m_x = 3*(m_x-427); 
			m_y = 3*(m_y-141); 
 
			bitmap.LoadBitmap(IDB_BITMAP7); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 0 && m_x < 213) 
			&& (m_y >= 283 && m_y <= 424))//ȡͼg 
		{ 
			m_x = 3*(m_x-0); 
			m_y = 3*(m_y-283); 
 
			bitmap.LoadBitmap(IDB_BITMAP8); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 213 && m_x < 427) 
			&& (m_y >= 283 && m_y <= 424))//ȡͼh 
		{ 
			m_x = 3*(m_x-213); 
			m_y = 3*(m_y-283); 
 
			bitmap.LoadBitmap(IDB_BITMAP9); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen = pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
		else if((m_x >= 427 && m_x <= 640) 
			&& (m_y >= 283 && m_y <= 424))//ȡͼi 
		{ 
			m_x = 3*(m_x-427); 
			m_y = 3*(m_y-283); 
 
			bitmap.LoadBitmap(IDB_BITMAP10); 
		    dcMemory.CreateCompatibleDC(pDC); 
		    dcMemory.SelectObject(&bitmap); 
	        pDC->StretchBlt(0,0,640,424,&dcMemory,0,0,640,424,SRCCOPY); 
 
//			CPen *pOldPen; 
	        CPen Pen(PS_SOLID,1,RGB(0,0,0)); 
	        pOldPen=pDC->SelectObject(&Pen); 
 
//			CBrush *pOldBrush; 
	        CBrush Brush(RGB(255,0,0)); 
	        pOldBrush = pDC->SelectObject(&Brush); 
	        pDC->Ellipse(m_x-m_radius,m_y-m_radius, 
				m_x+m_radius,m_y+m_radius); 
		} 
	} 
	pDC->SelectObject(&pOldPen); 
    pDC->SelectObject(&pOldBrush); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CGpsTrackerView diagnostics 
 
#ifdef _DEBUG 
void CGpsTrackerView::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void CGpsTrackerView::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
CGpsTrackerDoc* CGpsTrackerView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGpsTrackerDoc))); 
	return (CGpsTrackerDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CGpsTrackerView message handlers 
 
void CGpsTrackerView::OnTimer(UINT nIDEvent)  
{ 
	// TODO: Add your message handler code here and/or call default 
	m_x = m_intLatitude; 
	m_y = m_intLongitude; 
	InvalidateRect(NULL,FALSE); 
//	UpdateWindow(); 
    odb2dlg.m_strOdb2Content=m_szODB2Content; 
	gpsdlg.m_strGpsLatitude=m_strLatitude; 
	gpsdlg.m_strGpsLongitude=m_strLongitude; 
 
 
	if (m_SendRead%4 == 0) 
	{ 
		HANDLE hReadThread; 
		DWORD dwThreadID; 
 
		// ΪCOM1´´½¨Ò»¸ö¶Á¶Ë¿ÚÏß³Ì 
		if (hReadThread = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)PortReadThread, 
			this, 0, &dwThreadID)) 
		{ 
			CloseHandle (hReadThread); 
		} 
		else 
		{ 
			::MessageBox (NULL, _T("²»ÄÜ´´½¨Ò»¸ö¶Á¶Ë¿ÚÏß³Ì"), _T("Error"), MB_OK); 
		} 
	} 
 
 
	if (m_SendRead%4 == 1) 
	{ 
 
		HANDLE hReadThread; 
		DWORD dwThreadID; 
		m_szSend=m_szGpsContent+m_szODB2Content; 
 
		// ΪCOM1´´½¨Ò»¸öд¶Ë¿ÚÏß³Ì 
		if (hReadThread = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)PortSendThread, 
			this, 0, &dwThreadID)) 
		{ 
			CloseHandle (hReadThread); 
		} 
		else 
		{ 
			::MessageBox (NULL, _T("²»ÄÜ´´½¨Ò»¸öд¶Ë¿ÚÏß³Ì"), _T("Error"), MB_OK); 
		} 
	} 
    if (m_SendRead%4 == 2) 
	{ 
		HANDLE hReadThread; 
		DWORD dwThreadID; 
 
		// ΪCOM5´´½¨Ò»¸ö¶Á¶Ë¿ÚÏß³Ì 
		if (hReadThread = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)PortReadThread1, 
			this, 0, &dwThreadID)) 
		{ 
			CloseHandle (hReadThread); 
		} 
		else 
		{ 
			::MessageBox (NULL, _T("²»ÄÜ´´½¨Ò»¸ö¶Á¶Ë¿ÚÏß³Ì"), _T("Error"), MB_OK); 
		} 
	} 
 
	if (m_SendRead%4 == 3) 
	{ 
 
		HANDLE hReadThread; 
		DWORD dwThreadID; 
 
 
		// ΪCOM5´´½¨Ò»¸öд¶Ë¿ÚÏß³Ì 
		if (hReadThread = CreateThread (NULL,0,(LPTHREAD_START_ROUTINE)PortSendThread1, 
			this, 0, &dwThreadID)) 
		{ 
			CloseHandle (hReadThread); 
		} 
		else 
		{ 
			::MessageBox (NULL, _T("²»ÄÜ´´½¨Ò»¸öд¶Ë¿ÚÏß³Ì"), _T("Error"), MB_OK); 
		} 
	} 
 
	m_SendRead++; 
 
	 
	CView::OnTimer(nIDEvent); 
} 
 
void CGpsTrackerView::OnStart()  
{ 
	// TODO: Add your command handler code here 
	m_nTimer = SetTimer(1,500,NULL); 
	m_SendRead = 0; 
} 
 
void CGpsTrackerView::OnStop()  
{ 
	// TODO: Add your command handler code here 
	KillTimer(m_nTimer); 
 
} 
 
void PortReadThread(CGpsTrackerView* pView) 
{ 
 
	    int i,j,k; 
		char data[1024]; 
 
		char latitude[4]; 
        char longitude[4]; 
	if (Serial.Open(1,19200) )//´ò¿ª¶Ë¿Ú 
	{    
 
 
		#ifdef _UNICODE 
		Serial.ReadData(data); 
		USES_CONVERSION; 
		 
		for(i=0;i<1024;i++) 
		{ 
			if (data[i] == 'J') 
			{    
				for(k=i+1,j=0;km_intLatitude = atoi(latitude); 
		pView->m_intLongitude = atoi(longitude); 
		pView->m_strLatitude = A2W(latitude); 
		pView->m_strLongitude = A2W(longitude); 
		pView->m_szGpsContent = A2W(data); 
       
	#else 
		Serial.ReadData(data); 
 
		for(i=0;i<1024;i++) 
		{ 
			if (data[i] == 'J') 
			{ 
				for(k=i+1,j=0;km_intLatitude = atoi(latitude); 
		pView->m_intLongitude = atoi(longitude); 
 
		pView->m_szGpsContent = data; 
		#endif 
		  Serial.PortClose(); 
	} 
	else 
	{ 
		AfxMessageBox(_T("Open Port error.")); 
 
	} 
 
} 
 
void PortReadThread1(CGpsTrackerView* pView) 
{    
   char data1[1024]; 
   if (Serial.Open(5,19200) ) 
   {     
     #ifdef _UNICODE 
		Serial.ReadData(data1); 
		USES_CONVERSION; 
		pView->m_szODB2Content = A2W(data1); 
      #else 
		Serial.ReadData(data1); 
		pView->m_szODB2Content = data1; 
      #endif 
		Serial.PortClose(); 
   } 
   else 
	{ 
		AfxMessageBox(_T("Open Port error.")); 
 
	} 
 
} 
 
void PortSendThread(CGpsTrackerView* pView) 
{ 
 
	if (Serial.Open(1,19200) )//´ò¿ª¶Ë¿Ú 
	{ 
		#ifdef _UNICODE 
		USES_CONVERSION; 
		Serial.SendData(W2A(pView->m_szSend),strlen(W2A(pView->m_szSend))); 
		#else 
		Serial.SendData((char*)(LPCTSTR)pView->m_szSend, 
			strlen((char*)(LPCTSTR)pView->m_szSend)); 
		#endif 
		Serial.PortClose(); 
	} 
	else 
	{ 
		AfxMessageBox(_T("Open Port error.")); 
	} 
} 
 
 
void PortSendThread1(CGpsTrackerView* pView) 
{	 
	if (Serial.Open(5,19200) )//´ò¿ª¶Ë¿Ú 
	{ 
		#ifdef _UNICODE 
		USES_CONVERSION; 
		Serial.SendData(W2A(pView->m_szGpsContent),strlen(W2A(pView->m_szGpsContent))); 
		#else 
		Serial.SendData((char*)(LPCTSTR)pView->m_szGpsContent, 
			strlen((char*)(LPCTSTR)pView->m_szGpsContent)); 
		#endif 
		Serial.PortClose(); 
	} 
	else 
	{ 
		AfxMessageBox(_T("Open Port error.")); 
	} 
} 
 
 
 
void CGpsTrackerView::OnZoomin()  
{ 
	// TODO: Add your command handler code here 
	m_Zoom = true; 
} 
 
void CGpsTrackerView::OnZoomout()  
{ 
	// TODO: Add your command handler code here 
	m_Zoom = false; 
} 
 
void CGpsTrackerView::OnGps()  
{ 
	// TODO: Add your command handler code here 
	gpsdlg.Create(IDD_GPSDIALOG); 
	gpsdlg.ShowWindow(SW_SHOW); 
} 
 
void CGpsTrackerView::OnGpsInfo()  
{ 
	// TODO: Add your command handler code here 
	gpsdlg.Create(IDD_GPSDIALOG); 
	gpsdlg.ShowWindow(SW_SHOW); 
 
	 
} 
 
void CGpsTrackerView::OnOdb2Info()  
{ 
	// TODO: Add your command handler code here 
	odb2dlg.Create(IDD_ODB2DIALOG); 
	odb2dlg.ShowWindow(SW_SHOW); 
	 
}