GPSDemoDlg.cpp
上传用户:wty58716
上传日期:2022-06-16
资源大小:3084k
文件大小:4k
源码类别:

Windows Mobile

开发平台:

Visual C++

  1. // GPSDemoDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "GPSDemo.h"
  5. #include "GPSDemoDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif
  9. //定义GPS串口号
  10. #define GPS_COM_NO 8
  11. // CGPSDemoDlg 对话框
  12. CGPSDemoDlg::CGPSDemoDlg(CWnd* pParent /*=NULL*/)
  13. : CDialog(CGPSDemoDlg::IDD, pParent)
  14. {
  15. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  16. m_pGps = NULL;  //GPS类对象 
  17. }
  18. void CGPSDemoDlg::DoDataExchange(CDataExchange* pDX)
  19. {
  20. CDialog::DoDataExchange(pDX);
  21. }
  22. BEGIN_MESSAGE_MAP(CGPSDemoDlg, CDialog)
  23. //}}AFX_MSG_MAP
  24. ON_MESSAGE(WM_GPS_RECV_BUF,OnRecvSerialData)
  25. ON_MESSAGE(WM_GPS_STATE_CHANGE_MESSAGE,OnGpsStateChange)
  26. ON_MESSAGE(WM_GPS_RECV_VALID_LONGLAT,OnRecvValidGps)
  27. ON_BN_CLICKED(IDC_BTN_OPEN, &CGPSDemoDlg::OnBnClickedBtnOpen)
  28. ON_BN_CLICKED(IDC_BTN_CLOSE, &CGPSDemoDlg::OnBnClickedBtnClose)
  29. ON_BN_CLICKED(IDC_BTN_CLEAR, &CGPSDemoDlg::OnBnClickedBtnClear)
  30. END_MESSAGE_MAP()
  31. // CGPSDemoDlg 消息处理程序
  32. BOOL CGPSDemoDlg::OnInitDialog()
  33. {
  34. CDialog::OnInitDialog();
  35. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  36. //  执行此操作
  37. SetIcon(m_hIcon, TRUE); // 设置大图标
  38. SetIcon(m_hIcon, FALSE); // 设置小图标
  39. // TODO: 在此添加额外的初始化代码
  40. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  41. }
  42. // 显示GPS串口接收的数据
  43. LONG CGPSDemoDlg::OnRecvSerialData(WPARAM wParam,LPARAM lParam)
  44. {
  45. //得到原始数据
  46. char * aRecv = (char *)wParam;
  47. CString strRecv = L"";
  48. CString strRecv1 = L"";
  49. //
  50. CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDT_RECV);
  51. //得到接收框原来的文本
  52. pEdtRecv->GetWindowTextW(strRecv1);
  53. strRecv = CString(aRecv);
  54. //追加新接收到的文本
  55. pEdtRecv->SetWindowTextW(strRecv1+strRecv);
  56. //释放内存
  57. delete[] aRecv;
  58. aRecv = NULL;
  59. return 0;
  60. }
  61. // 显示GPS状态变化
  62. LONG CGPSDemoDlg::OnGpsStateChange(WPARAM wParam,LPARAM lParam)
  63. {
  64. //GPS状态
  65. GPSDEV_STATE gpsStatus = (GPSDEV_STATE)wParam;
  66. CString strHint = L"";
  67. //
  68. CStatic *pLblStatus = (CStatic*)GetDlgItem(IDC_LBL_GPS_STATUS);
  69. switch (gpsStatus)
  70. {
  71. //GPS有效数据
  72. case GPS_VALID_DATA:
  73. {
  74. strHint = L"数据有效";
  75. }
  76. break;
  77. //GPS无效数据
  78. case GPS_INVALID_DATA:
  79. {
  80. strHint = L"数据无效";
  81. }
  82. break;
  83. //GPS串口设备未打开
  84. case GPS_DEV_NOTOPENED:
  85. {
  86. strHint = L"串口未打开";
  87. }
  88. break;
  89. //GPS串口设备打开
  90. case GPS_DEV_OPENED:
  91. {
  92. strHint = L"串口打开";
  93. }
  94. break;
  95. //GPS无数据
  96. case GPS_NODATA:
  97. {
  98. strHint = L"无数据";
  99. }
  100. break;
  101. default:
  102. break;
  103. }
  104. //设置GPS状态标题
  105. pLblStatus->SetWindowTextW(strHint);
  106. return 0;
  107. }
  108. // 显示GPS有效数据
  109. LONG CGPSDemoDlg::OnRecvValidGps(WPARAM wParam,LPARAM lParam)
  110. {
  111. //得到GPS数据
  112. GPSData *pGps = (GPSData*)wParam;
  113. CEdit *pEdtLong = (CEdit*)GetDlgItem(IDC_EDT_LONG);
  114. CEdit *pEdtLat = (CEdit*)GetDlgItem(IDC_EDT_LAT);
  115. CString strLong = CString(pGps->longitude);  //经度
  116. CString strLat = CString(pGps->latitude);  //纬度
  117.  
  118. //显示经纬度信息
  119. pEdtLong->SetWindowTextW(strLong);
  120. pEdtLat->SetWindowTextW(strLat);
  121. //释放内存
  122. delete pGps;
  123. pGps = NULL;
  124. return 0;
  125. }
  126. //打开
  127. void CGPSDemoDlg::OnBnClickedBtnOpen()
  128. {
  129. CString strTmp;
  130. //先检查是否释放
  131. if (m_pGps != NULL)
  132. {
  133. m_pGps->Close();
  134. delete m_pGps;
  135. m_pGps = NULL;
  136. }
  137. //创建GPS逻辑类
  138. m_pGps = new CGPS();
  139. //
  140. if (m_pGps->Open(this,GPS_COM_NO,115200))
  141. {
  142. AfxMessageBox(L"GPS设备打开成功");
  143. }
  144. else
  145. {
  146. AfxMessageBox(L"GPS 设备打开失败");
  147. return ;
  148. }
  149. }
  150. //关闭
  151. void CGPSDemoDlg::OnBnClickedBtnClose()
  152. {
  153. //释放GPS对象
  154. if (m_pGps != NULL)
  155. {
  156. m_pGps->Close();
  157. delete m_pGps;
  158. m_pGps = NULL;
  159. }
  160. }
  161. //清除
  162. void CGPSDemoDlg::OnBnClickedBtnClear()
  163. {
  164. //
  165. CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDT_RECV);
  166. pEdtRecv->SetWindowTextW(L"");
  167. }