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

📄 测试程序dlg.cpp

📁 GPRS协议解析示例。该示例演示里使用GPRS控件实现客户端程序向车载GPS终端发送点名、监听等指令
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 测试程序Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "测试程序.h"
#include "测试程序Dlg.h"
#include "GPRSstruct.h"
#include "Interval.h"
#include "LightState.h"
#include "Message.h"
#include "UpdateMessage.h"
#include "IpAddress.h"
#include "UpdateID.h"
#include "ElecCrawl.h"
#include "PhoneNumber.h"
#include "SuperSpeed.h"
#include "RunWay.h"
#include "AutoReport.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CMyDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMyDlg)
	m_ID = _T("13900000000");
	m_ListenNumber = _T("13690000000");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMyDlg)
	DDX_Control(pDX, IDC_LIST, m_List);
	DDX_Control(pDX, IDC_CALLING, m_Calling);
	DDX_Control(pDX, IDC_GPRSCONTROLCTRL1, m_active);
	DDX_Text(pDX, IDC_ID, m_ID);
	DDV_MaxChars(pDX, m_ID, 11);
	DDX_Text(pDX, IDC_LISTEN_NUMBER, m_ListenNumber);
	DDV_MaxChars(pDX, m_ListenNumber, 12);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
	//{{AFX_MSG_MAP(CMyDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_Inital, OnInital)
	ON_BN_CLICKED(IDC_CALLING, OnCalling)
	ON_BN_CLICKED(IDC_LISTEN, OnListen)
	ON_BN_CLICKED(IDC_INTERVAL_MAXNETCHECK, OnIntervalMaxnetcheck)
	ON_BN_CLICKED(IDC_LIGHTE_STATE, OnLighteState)
	ON_BN_CLICKED(IDC_MESSAGE, OnMessage)
	ON_BN_CLICKED(IDC_UPDATE_MESSAGE, OnUpdateMessage)
	ON_BN_CLICKED(IDC_SET_IP, OnSetIp)
	ON_BN_CLICKED(IDC_SET_ID, OnSetId)
	ON_BN_CLICKED(IDC_ELEC_CRAWL, OnElecCrawl)
	ON_BN_CLICKED(IDC_PHONENUMBER, OnPhonenumber)
	ON_BN_CLICKED(IDC_SUPER_SPEED, OnSuperSpeed)
	ON_BN_CLICKED(IDC_RUN_WAY, OnRunWay)
	ON_BN_CLICKED(IDC_AUTO_REPORT, OnAutoReport)
	ON_BN_CLICKED(IDC_VOICE_REPORT, OnVoiceReport)
	ON_BN_CLICKED(IDC_CONFIRM, OnConfirm)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers

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

//	CBitmap bm;
//	bm.LoadBitmap(IDB_BITMAP1);
//	m_Calling.SetBitmap(HBITMAP(bm));
// 	m_Calling.Invalidate();
	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	sizes.cx = 0;
	sizes.cy = 10;
	m_List.InsertColumn(0,"车台上传数据",LVCFMT_LEFT,1000);
	ViewCount = 0;
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CMyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMyDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMyDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMyDlg::OnInital() 
{
	m_active.Initial(5000);
}

//点名
void CMyDlg::OnCalling() 
{
	UpdateData(TRUE);

	CString VID = m_ID;
	CALLING mydata;
	VID.Delete(0,1);
	mydata.vehicle_ID = atoi(VID);

//	TRANSE_TO_VARIANT((LPCALLING)&mydata);
	BOOL result = m_active.Calling((VARIANT*)&mydata);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//要求车台执行监听动作
void CMyDlg::OnListen()
{
	UpdateData(TRUE);

	REQUESTMONITOR Monitor;
	memset(&Monitor,0,sizeof(Monitor));
	
	CString tempID = m_ID;
	CString phoneNumber = m_ListenNumber;
	tempID.Delete(0,1);

	Monitor.vehicle_ID = atoi(tempID);
	memcpy(Monitor.monitornum,phoneNumber,phoneNumber.GetLength());

//	TRANSE_TO_VARIANT((LPREQUESTMONITOR)&Monitor);
	BOOL result = m_active.RequestMonitor((VARIANT*)&Monitor);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//设置定位数据上传时间间隔和网络测试包最大发送次数
void CMyDlg::OnIntervalMaxnetcheck() 
{
	UpdateData(TRUE);

	CInterval dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}

	ORIENTUPINTERVAL IntervalAMax;
	BYTE Interval	= 0;
	BYTE RedialNum	= 0;
	BYTE RedialWait	= 0;
	BYTE TestMax	= 0;
	DWORD CarID		= 0;
	CString tempID = m_ID;
	tempID.Delete(0,1);
	
	//各项参数的值
	Interval = dlg.m_Interval;
	RedialNum = dlg.m_RedialNum;
	RedialWait = dlg.m_RedialTime;
	TestMax = dlg.m_NetCheckTime;
	CarID = atoi(tempID);

	IntervalAMax.interval = Interval;
	IntervalAMax.redialnum = RedialNum;
	IntervalAMax.redialwait = RedialWait;
	IntervalAMax.testmax = TestMax;
	IntervalAMax.vehicle_ID = CarID;
//	TRANSE_TO_VARIANT((LPORIENTUPINTERVAL)&IntervalAMax);
	BOOL result = m_active.SetOrientUploadInterval((VARIANT*)&IntervalAMax);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//设置指示灯状态
void CMyDlg::OnLighteState() 
{
	UpdateData(TRUE);

	CLightState dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}
	
	INDICATELIGHTSTATUS LightState;

	CString tempID = m_ID;
	tempID.Delete(0,1);

	BYTE State = dlg.m_LightState;
	DWORD CarID = atoi(tempID);
	
	LightState.status = State;
	LightState.vehicle_ID = CarID;

//	TRANSE_TO_VARIANT((LPINDICATELIGHTSTATUS)&LightState);
	BOOL result = m_active.SetIndicatorLightStatus((VARIANT*)&LightState);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//下发短消息
void CMyDlg::OnMessage() 
{
	UpdateData(TRUE);

	CMessage dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}
	
	DOWNSMESSAGE SMMessage;

	CString Message = "";
	BYTE	MessLen = 0;
	DWORD	CarID	= 0;
	CString tempID = m_ID;
	tempID.Delete(0,1);

	Message = dlg.m_Message;
	MessLen = Message.GetLength();
	CarID	= atoi(tempID);

	SMMessage.vehicle_ID	= CarID;
	SMMessage.len			= MessLen;
	memset(SMMessage.message,0,100);
	memcpy(SMMessage.message,Message,MessLen);

//	TRANSE_TO_VARIANT((LPDOWNSMESSAGE)&SMMessage);
	BOOL result = m_active.DownShortMessage((VARIANT*)&SMMessage);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//修改固定短消息
void CMyDlg::OnUpdateMessage() 
{
	UpdateData(TRUE);

	CUpdateMessage dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}

	REVISEFIXEDSMESSAGE UpdateMessge;
	memset(&UpdateMessge,0,sizeof(UpdateMessge));

	DWORD	vehicle_ID				= 0;			//车台ID号码
	BYTE    groupnum				= 0;			//组号
	bool	IfUpdate[5]				= {FALSE};
	CString	MessageTobeUpdate[5]	= {""};
	CString tempID = m_ID;
	tempID.Delete(0,1);

	//给各内容赋值
	vehicle_ID	= atoi(tempID);
	groupnum	= dlg.m_GroupNumber;
	for (int i=0; i<5; i++)
	{
		IfUpdate[i] = TRUE;
		MessageTobeUpdate[i] = dlg.m_Message[i];
	}

	//给UpdateMessage赋值
	UpdateMessge.groupnum = groupnum;
	UpdateMessge.vehicle_ID = vehicle_ID;
	for (i=0; i<5; i++)
	{
		BYTE LengthofMess = MessageTobeUpdate[i].GetLength();
		UpdateMessge.shortmessagegroup[i].ifrevised = IfUpdate[i];
		memcpy(UpdateMessge.shortmessagegroup[i].content,			\
				MessageTobeUpdate[i],LengthofMess);
		UpdateMessge.shortmessagegroup[i].len = LengthofMess;
	}//for

//	TRANSE_TO_VARIANT((LPREVISEFIXEDSMESSAGE)&UpdateMessge);
	BOOL result = m_active.ReviseFixedShortMessage((VARIANT*)&UpdateMessge);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//设置IP地址
void CMyDlg::OnSetIp() 
{
	UpdateData(TRUE);

	CIpAddress dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}
	
	IPADDRESS IP;
	memset(&IP,0,sizeof(IP));
	CString tempID = m_ID;
	tempID.Delete(0,1);

	DWORD CarID = atoi(tempID);
	DWORD NewIP = 0;

	NewIP = dlg.m_IpAddress;

	IP.vehicle_ID	= CarID;
	IP.ipaddress	= NewIP;

//	TRANSE_TO_VARIANT((LPIPADDRESS)&IP);
	BOOL result = m_active.SetIPAddress((VARIANT*)&IP);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//设置车台ID
void CMyDlg::OnSetId() 
{
	UpdateData(TRUE);

	CUpdateID dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}

	VEHICLEID SetID;
	memset(&SetID,0,sizeof(SetID));
	CString tempID = m_ID;					//当前车台的ID
	CString stringNewID = dlg.m_ID;			//修改后的ID
	tempID.Delete(0,1);
	stringNewID.Delete(0,1);

	DWORD newID = atoi(stringNewID);
	DWORD oldID = atoi(tempID);

	SetID.newvehicle_ID = newID;
	SetID.vehicle_ID	= oldID;

//	TRANSE_TO_VARIANT((LPVEHICLEID)&SetID);
	BOOL result = m_active.SetVehicleID((VARIANT*)&SetID);
//	DELETE_VARIANT;

	UpdateData(FALSE);
}

//中心向车台下发电子围栏位置数据
void CMyDlg::OnElecCrawl() 
{
	UpdateData(TRUE);

	CElecCrawl dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}
	
	DOWNRAILPOSITION RailPosition;

	CString tempID = m_ID;
	tempID.Delete(0,1);
	DWORD AlarmStatus = 0;
	for ( int i=0; i<15; i++)
	{
		AlarmStatus += dlg.AlarmType[i];
		AlarmStatus <<= 2;
	}
	
	RailPosition.vehicle_ID = atoi(tempID);				//车台ID
	RailPosition.railnum	= dlg.m_CrawlNuber;			//围栏个数
	RailPosition.frameno	= dlg.m_FrameNumber;		//帧号
	RailPosition.busno		= 2;						//公交线路号
	RailPosition.alarmstatus = AlarmStatus;				//报警状态
	
	float tempData = 0.0;
	for (i=0; i<15; i++)
	{
		RailPosition.llatitude[i] = (DWORD)(dlg.LULatitude[i]*3600000);
		RailPosition.llongitude[i] = (DWORD)(dlg.LULongitude[i]*3600000);
		RailPosition.rlatitude[i] = (DWORD)(dlg.RDLatitude[i]*3600000);
		RailPosition.rlongitude[i] = (DWORD)(dlg.RDLongitude[i]*3600000);
	}
	
//	TRANSE_TO_VARIANT((LPDOWNSMESSAGE)&RailPosition);
	BOOL result = m_active. DownloadRailPosition((VARIANT*)&RailPosition);
//	DELETE_VARIANT;
	
	UpdateData(FALSE);
}

//设置允许的电话号码
void CMyDlg::OnPhonenumber() 
{
	UpdateData(TRUE);

	CPhoneNumber dlg;
	if (IDOK != dlg.DoModal())
	{
		return;
	}

	PERMITPHONENUMBER PermitNumber;
	memset(&PermitNumber,0,sizeof(PermitNumber));

	DWORD		vehicle_ID			= 0;		//车台ID号码
	PHONENUMBER phonenum[15]		= {0};		//电话号码	
	BYTE		num					= 0;		//电话号码个数
	BYTE		restrictstatus[2]	= {0};		//通话限制状态
	BYTE		groupnum			= 0;		//组号
	CString		PhoneNumber[15]		= {""};		//电话号码
	CString		tempID = m_ID;					//车台ID
	
	tempID.Delete(0,1);
	
	num = dlg.m_NumOfPhoneNumber;
	groupnum = dlg.m_GroupNumber;
	restrictstatus[0] = dlg.Limitation[0];
	restrictstatus[1] = dlg.Limitation[1];
	PhoneNumber[0] = dlg.m_PhoneNumber1;
	PhoneNumber[1] = dlg.m_PhoneNumber2;
	PhoneNumber[2] = dlg.m_PhoneNumber3;
	PhoneNumber[3] = dlg.m_PhoneNumber4;
	PhoneNumber[4] = dlg.m_PhoneNumber5;
	PhoneNumber[5] = dlg.m_PhoneNumber6;
	PhoneNumber[6] = dlg.m_PhoneNumber7;
	PhoneNumber[7] = dlg.m_PhoneNumber8;
	PhoneNumber[8] = dlg.m_PhoneNumber9;
	PhoneNumber[9] = dlg.m_PhoneNumber10;
	PhoneNumber[10] = dlg.m_PhoneNumber11;
	PhoneNumber[11] = dlg.m_PhoneNumber12;
	PhoneNumber[12] = dlg.m_PhoneNumber13;
	PhoneNumber[13] = dlg.m_PhoneNumber14;

⌨️ 快捷键说明

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