wang_serialDlg.cpp
上传用户:zhqmouse
上传日期:2022-05-26
资源大小:47k
文件大小:5k
源码类别:

GPS编程

开发平台:

Visual C++

  1. // wang_serialDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "wang_serial.h"
  5. #include "wang_serialDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. Cwang_serialDlg::Cwang_serialDlg(CWnd* pParent /*=NULL*/)
  10. : CDialog(Cwang_serialDlg::IDD, pParent) 
  11. {
  12. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  13. m_pGps = NULL;  //GPS类对象 
  14. }
  15. void Cwang_serialDlg::DoDataExchange(CDataExchange* pDX)
  16. {
  17. CDialog::DoDataExchange(pDX);
  18. }
  19. BEGIN_MESSAGE_MAP(Cwang_serialDlg, CDialog)
  20. //}}AFX_MSG_MAP
  21. ON_MESSAGE(WM_GPS_RECV_BUF,OnRecvSerialData)
  22. ON_MESSAGE(WM_GPS_STATE_CHANGE_MESSAGE,OnGpsStateChange)
  23. ON_MESSAGE(WM_GPS_RECV_VALID_LONGLAT,OnRecvValidGps)
  24. ON_BN_CLICKED(IDC_OPEN_COMM, &Cwang_serialDlg::OnBnClickedOpenComm)
  25. ON_BN_CLICKED(IDC_CLOSE_COMM, &Cwang_serialDlg::OnBnClickedCloseComm)
  26. ON_BN_CLICKED(IDC_CLEAR, &Cwang_serialDlg::OnBnClickedClear)
  27. END_MESSAGE_MAP()
  28. // Cwang_serialDlg 消息处理程序
  29. BOOL Cwang_serialDlg::OnInitDialog()
  30. {
  31. CDialog::OnInitDialog();
  32. SetIcon(m_hIcon, TRUE);
  33. SetIcon(m_hIcon, FALSE);
  34. // TODO: 在此添加额外的初始化代码
  35. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  36. }
  37. #if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
  38. void Cwang_serialDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
  39. {
  40. if (AfxIsDRAEnabled())
  41. {
  42. DRA::RelayoutDialog(
  43. AfxGetResourceHandle(), 
  44. this->m_hWnd, 
  45. DRA::GetDisplayMode() != DRA::Portrait ? 
  46. MAKEINTRESOURCE(IDD_WANG_SERIAL_DIALOG_WIDE) : 
  47. MAKEINTRESOURCE(IDD_WANG_SERIAL_DIALOG));
  48. }
  49. }
  50. #endif
  51. LONG Cwang_serialDlg::OnRecvSerialData(WPARAM wParam,LPARAM lParam)
  52. {
  53. char * aRecv = (char *)wParam;
  54. CString strRecv = L"";
  55. CString strRecv1 = L"";
  56. CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDIT5);
  57. strRecv = CString(aRecv);
  58. pEdtRecv->SetWindowTextW(strRecv);
  59. delete[] aRecv;
  60. aRecv = NULL;
  61. return 0;
  62. }
  63. // 显示GPS状态变化
  64. LONG Cwang_serialDlg::OnGpsStateChange(WPARAM wParam,LPARAM lParam)
  65. {
  66. //GPS状态
  67. GPSDEV_STATE gpsStatus = (GPSDEV_STATE)wParam;
  68. CString strHint = L" ", strRecv=L" ";
  69. //
  70. CStatic *pLblStatus = (CStatic*)GetDlgItem(IDC_GPS_S);
  71. switch (gpsStatus)
  72. {
  73. //GPS有效数据
  74. case GPS_VALID_DATA:
  75. {
  76. strHint = L" Valid Data";}
  77. break;
  78. //GPS无效数据
  79. case GPS_INVALID_DATA:
  80. {
  81. strHint = L"Invalid Data ";}
  82. break;
  83. //GPS串口设备未打开
  84. case GPS_DEV_NOTOPENED:
  85. {
  86. strHint = L"Com Port closed";}
  87. break;
  88. //GPS串口设备打开
  89. case GPS_DEV_OPENED:
  90. {
  91. strHint = L"Com Port opened";}
  92. break;
  93. //GPS无数据
  94. case GPS_NODATA:
  95. {
  96. strHint = L"Empty";}
  97. break;
  98. default:
  99. break;
  100. }
  101. //设置GPS状态标题
  102. pLblStatus->SetWindowTextW(strHint);
  103. return 0;
  104. }
  105. // 显示GPS有效数据
  106. LONG Cwang_serialDlg::OnRecvValidGps(WPARAM wParam,LPARAM lParam)
  107. {
  108. //得到GPS数据
  109. GPSData *pGps = (GPSData*)wParam;
  110. HANDLE hAppend,hFile;
  111. char buff[256];
  112.  CString LL;
  113. DWORD dwBytesRead,dwBytesWritten;
  114. CEdit *pEdtLong = (CEdit*)GetDlgItem(IDC_EDIT_LONGITUDE);
  115. CEdit *pEdtLat = (CEdit*)GetDlgItem(IDC_EDIT_LATITUDE);
  116. CEdit *pEdtSpe = (CEdit*)GetDlgItem(IDC_EDIT_SPEED);
  117. CEdit *pEdtDat = (CEdit*)GetDlgItem(IDC_EDIT_DATE);
  118. CString strLong = CString(pGps->longitude);  //Longitude
  119.    pEdtLong->SetWindowTextW(strLong);
  120. CString strLat = CString(pGps->latitude);  //Latitude
  121. pEdtLat->SetWindowTextW(strLat);
  122. CString strspe = CString(pGps->speed);        //speed
  123.       pEdtSpe->SetWindowTextW(strspe);
  124. CString strdat = CString(pGps->date);        //date
  125.       pEdtDat->SetWindowTextW(strdat);
  126. delete pGps;
  127. pGps = NULL;
  128.     
  129.   LL=':'+ strLong +':'+strLat;
  130. ///////////////////////////////
  131. int len = LL.GetLength ();
  132. char *psave = new char[len];
  133. for(int i=0; i < len; i++)psave[i] =(char)LL.GetAt(i);
  134.  hFile = CreateFile (TEXT("\DATA.TXT"),  GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); 
  135.  if (hFile == INVALID_HANDLE_VALUE){ OnBnClickedCloseComm();return 0;}
  136.  
  137.   ReadFile (hFile, buff, 256, &dwBytesRead, NULL);
  138.     CString strRecv = CString(buff).Mid(len,100);
  139.    CStatic *pEdtRecv = (CStatic*)GetDlgItem(IDC_STATICM);
  140. pEdtRecv -> SetWindowTextW(strRecv); 
  141. CloseHandle (hFile);
  142.   hAppend = CreateFile (TEXT("\DATA.TXT"), GENERIC_WRITE, 0,  NULL,  OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL,  NULL);    
  143.   if (hAppend == INVALID_HANDLE_VALUE) { OnBnClickedCloseComm();return 0;}
  144.   WriteFile (hAppend, psave, len, &dwBytesWritten, NULL);
  145.   CloseHandle (hAppend);
  146.   return 0;
  147. }
  148. ////===============================================
  149. void Cwang_serialDlg::OnBnClickedOpenComm()
  150. {
  151. CString strTmp;
  152. if (m_pGps != NULL)
  153. { m_pGps->Close(); delete m_pGps; m_pGps = NULL; }
  154. m_pGps = new CGPS();
  155. if (m_pGps->Open(this,1,4800)){ }
  156. else {AfxMessageBox(L"Open GPS unit fail");return ;}
  157. GetDlgItem(IDC_OPEN_COMM)->EnableWindow(FALSE);
  158. GetDlgItem(IDC_CLOSE_COMM)->EnableWindow(TRUE);
  159. }
  160. void Cwang_serialDlg::OnBnClickedCloseComm()
  161. {
  162. if (m_pGps != NULL)
  163. { m_pGps->Close();delete m_pGps;m_pGps = NULL;}
  164.  Sleep(1000);
  165.  GetDlgItem(IDC_OPEN_COMM)->EnableWindow(TRUE);
  166.  GetDlgItem(IDC_CLOSE_COMM)->EnableWindow(FALSE);
  167. }
  168. void Cwang_serialDlg::OnBnClickedClear()
  169. {
  170. CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDIT5);
  171. pEdtRecv->SetWindowTextW(L"");
  172. }