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

📄 gpsdemodlg.cpp

📁 wince pocket GPRSDemo
💻 CPP
字号:
// GPSDemoDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "GPSDemo.h"
#include "GPSDemoDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//定义GPS串口号
#define GPS_COM_NO 8
// CGPSDemoDlg 对话框

CGPSDemoDlg::CGPSDemoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CGPSDemoDlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_pGps = NULL;  //GPS类对象 
}

void CGPSDemoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CGPSDemoDlg, CDialog)

	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_GPS_RECV_BUF,OnRecvSerialData)
	ON_MESSAGE(WM_GPS_STATE_CHANGE_MESSAGE,OnGpsStateChange)
	ON_MESSAGE(WM_GPS_RECV_VALID_LONGLAT,OnRecvValidGps)
	ON_BN_CLICKED(IDC_BTN_OPEN, &CGPSDemoDlg::OnBnClickedBtnOpen)
	ON_BN_CLICKED(IDC_BTN_CLOSE, &CGPSDemoDlg::OnBnClickedBtnClose)
	ON_BN_CLICKED(IDC_BTN_CLEAR, &CGPSDemoDlg::OnBnClickedBtnClear)
END_MESSAGE_MAP()


// CGPSDemoDlg 消息处理程序

BOOL CGPSDemoDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}


// 显示GPS串口接收的数据
LONG CGPSDemoDlg::OnRecvSerialData(WPARAM wParam,LPARAM lParam)
{
	//得到原始数据
	char * aRecv = (char *)wParam;
	
	CString strRecv = L"";
	CString strRecv1 = L"";
	//
	CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDT_RECV);

	//得到接收框原来的文本
	pEdtRecv->GetWindowTextW(strRecv1);
	strRecv = CString(aRecv);
	//追加新接收到的文本
	pEdtRecv->SetWindowTextW(strRecv1+strRecv);
	
	//释放内存
	delete[] aRecv;
	aRecv = NULL;
	return 0;

}

// 显示GPS状态变化
LONG CGPSDemoDlg::OnGpsStateChange(WPARAM wParam,LPARAM lParam)
{
	//GPS状态
	GPSDEV_STATE gpsStatus = (GPSDEV_STATE)wParam;
	CString strHint = L"";
	//
	CStatic *pLblStatus = (CStatic*)GetDlgItem(IDC_LBL_GPS_STATUS);

	switch (gpsStatus)
	{
		//GPS有效数据
	case GPS_VALID_DATA:
		{
			strHint = L"数据有效";
		}
		break;
		//GPS无效数据
	case GPS_INVALID_DATA:
		{
			strHint = L"数据无效";
		}
		break;
		//GPS串口设备未打开
	case GPS_DEV_NOTOPENED:
		{
			strHint = L"串口未打开";
		}
		break;
		//GPS串口设备打开
	case GPS_DEV_OPENED:
		{
			strHint = L"串口打开";
		}
		break;
		//GPS无数据
	case GPS_NODATA:
		{
			strHint = L"无数据";
		}
		break;
	default:
		break;
	}

	//设置GPS状态标题
	pLblStatus->SetWindowTextW(strHint);
	return 0;
}

// 显示GPS有效数据
LONG CGPSDemoDlg::OnRecvValidGps(WPARAM wParam,LPARAM lParam)
{
	//得到GPS数据
	GPSData *pGps = (GPSData*)wParam;

	CEdit *pEdtLong = (CEdit*)GetDlgItem(IDC_EDT_LONG);
	CEdit *pEdtLat = (CEdit*)GetDlgItem(IDC_EDT_LAT);

	CString strLong = CString(pGps->longitude);  //经度
	CString strLat = CString(pGps->latitude);	 //纬度
 
	//显示经纬度信息
	pEdtLong->SetWindowTextW(strLong);
	pEdtLat->SetWindowTextW(strLat);

	//释放内存
	delete pGps;
	pGps = NULL;
	return 0;
}
//打开
void CGPSDemoDlg::OnBnClickedBtnOpen()
{
	CString strTmp;
	//先检查是否释放
	if (m_pGps != NULL)
	{
		m_pGps->Close();
		delete m_pGps;
		m_pGps = NULL;
	}
	//创建GPS逻辑类
	m_pGps = new CGPS();
	//
	if (m_pGps->Open(this,GPS_COM_NO,115200))
	{
		AfxMessageBox(L"GPS设备打开成功");
	}
	else
	{
		AfxMessageBox(L"GPS 设备打开失败");
		return ;
	}
}

//关闭
void CGPSDemoDlg::OnBnClickedBtnClose()
{
	//释放GPS对象
	if (m_pGps != NULL)
	{
		m_pGps->Close();
		delete m_pGps;
		m_pGps = NULL;
	}
}
//清除
void CGPSDemoDlg::OnBnClickedBtnClear()
{
	//
	CEdit *pEdtRecv = (CEdit*)GetDlgItem(IDC_EDT_RECV);

	pEdtRecv->SetWindowTextW(L"");

}

⌨️ 快捷键说明

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