📄 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 <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 + -