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

📄 gpstrackerview.cpp

📁 在PDA上接收GPS信号
💻 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 <atlconv.h>
#include <stdio.h>
#include <iso646.h>

#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;k<i+4;k++,j++)
				{
					latitude[j] = data[k];
				}
			}
			else if (data[i] == 'W')
			{    
				for(k=i+1,j=0;k<i+4;k++,j++)
				{
					longitude[j] = data[k];

				}
			}
		}
		pView->m_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;k<i+4;k++,j++)
				{
					latitude[j] = data[k];
				}
				else if (data[i] == 'W')
					for(k=i+1,j=0;k<i+4;k++,j++)
					{
						longitude6[j] = data[k];
					}
			}
		}
		pView->m_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);
	
}

⌨️ 快捷键说明

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