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); }