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

📄 dopoddlg.cpp

📁 Dopod手机读取端口数据
💻 CPP
字号:
// DopodDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "Test.h"
#include "DopodDlg.h"
#include "SetUp.h"

#define WM_NEW_DATA_ARRIVE WM_USER+1


// CDopodDlg 对话框

IMPLEMENT_DYNAMIC(CDopodDlg, CDialog)

CDopodDlg::CDopodDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDopodDlg::IDD, pParent)
	, m_strReceive(_T(""))
	, m_strTransmit(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

CDopodDlg::~CDopodDlg()
{
	delete m_pSerial;
}

void CDopodDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_RECEIVE, m_strReceive);
	DDX_Text(pDX, IDC_TRANSMIT, m_strTransmit);
	DDX_Control(pDX, IDC_RECEIVE, m_CtrlReceive);
}


BEGIN_MESSAGE_MAP(CDopodDlg, CDialog)
	ON_BN_CLICKED(IDC_RECE, &CDopodDlg::OnBnClickedRece)
	ON_BN_CLICKED(IDC_CLEAR_RECE, &CDopodDlg::OnBnClickedClearRece)
	ON_BN_CLICKED(IDC_SET, &CDopodDlg::OnBnClickedSet)
	ON_BN_CLICKED(IDC_CANCEL, &CDopodDlg::OnBnClickedCancel)
	ON_BN_CLICKED(IDC_OPEN, &CDopodDlg::OnBnClickedOpen)
	ON_WM_DESTROY()
	ON_MESSAGE(WM_NEW_DATA_ARRIVE,OnDataArrivedMsg)
END_MESSAGE_MAP()


// CDopodDlg 消息处理程序

BOOL CDopodDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	//初始化变量
	BaudRates[0]=1200;
	BaudRates[1]=2400;
	BaudRates[2]=4800;
	BaudRates[3]=9600;
	BaudRates[4]=19200;
	BaudRates[5]=38400;
	BaudRates[6]=57600;
	BaudRates[7]=115200;

	PortIDs[0]=_T("COM1:");
	PortIDs[1]=_T("COM2:");
	PortIDs[2]=_T("COM3:");
	PortIDs[3]=_T("COM4:");
	PortIDs[4]=_T("COM5:");
	PortIDs[5]=_T("COM6:");
	PortIDs[6]=_T("COM7:");
	PortIDs[7]=_T("COM8:");
	PortIDs[8]=_T("COM9:");
/*
	PortIDs[0]="COM1";
	PortIDs[1]="COM2";
	PortIDs[2]="COM3";
	PortIDs[3]="COM4";
	PortIDs[4]="COM5";
	PortIDs[5]="COM6";
	PortIDs[6]="COM7";
	PortIDs[7]="COM8";
	PortIDs[8]="COM9";
*/
	PortNo=7;
	BaudRate=3;
	Parity=NOPARITY;
	DataBits=8;
	StopBits=ONESTOPBIT;

	Receive=FALSE;
	Open=FALSE;
	m_strDataReceived=_T("");

	m_pSerial=new CPSerialPort();
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CDopodDlg::OnBnClickedRece()
{
	// TODO: 在此添加控件通知处理程序代码
	if(!Receive)
	{
		Receive=m_pSerial->Activate();
		if(Receive)
		{
			SetDlgItemText(IDC_RECE,_T("不接收"));
		}
	}
	else
	{
		m_pSerial->Deactivate();
		Receive=FALSE;
		SetDlgItemText(IDC_RECE,_T("接收"));
	}
}

void CDopodDlg::OnBnClickedClearRece()
{
	// TODO: 在此添加控件通知处理程序代码
	m_strReceive=_T("");
	GetDlgItemText(IDC_TRANSMIT,m_strTransmit);
	UpdateData(FALSE);
	CDialog::OnCancel();
}

void CDopodDlg::OnBnClickedSet()
{
	// TODO: 在此添加控件通知处理程序代码
	CSetUp* Dialog1;
	Dialog1=new CSetUp;

	Dialog1->BaudRate=BaudRate;
	Dialog1->PortNo=PortNo-1;
	Dialog1->Parity=Parity;
	Dialog1->DataBits=DataBits-7;
	Dialog1->StopBits=StopBits;

	if(Dialog1->DoModal()==IDOK)
	{
		BaudRate=Dialog1->BaudRate;
		PortNo=Dialog1->PortNo+1;
		Parity=Dialog1->Parity;
		DataBits=Dialog1->DataBits+7;
		StopBits=Dialog1->StopBits;
	}

	delete Dialog1;
}

void CDopodDlg::OnBnClickedCancel()
{
	// TODO: 在此添加控件通知处理程序代码
	CDialog::OnCancel();
}

void CDopodDlg::OnBnClickedOpen()
{
	// TODO: 在此添加控件通知处理程序代码
	if(!Open)
	{
		PortID=PortIDs[PortNo-1];
		Open=m_pSerial->OpenPort(PortID,BaudRates[BaudRate],DataBits,StopBits,Parity,OnDataArrive,(DWORD)this);
		if(Open)
		{
			SetDlgItemText(IDC_OPEN,_T("关闭端口"));
		}
	}
	else
	{
		m_pSerial->ClosePort();
		Open=FALSE;
		Receive=FALSE;
		SetDlgItemText(IDC_RECE,_T("接收"));
		SetDlgItemText(IDC_OPEN,_T("打开端口"));
	}
}

void CDopodDlg::OnDataArrive(char *data,int length,DWORD userdata)
{
	CDopodDlg *pWnd=(CDopodDlg *)userdata;
	::SendMessage(pWnd->m_hWnd,WM_NEW_DATA_ARRIVE,(WPARAM)data,LPARAM(length));
}

void CDopodDlg::OnDestroy()
{
	CDialog::OnDestroy();
	m_pSerial->ClosePort();
	// TODO: 在此处添加消息处理程序代码
}


LRESULT CDopodDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam)
{
	//处理收到的数据
	int length=(int)lParam;
	char *data=(char*)wParam;
	//CString temp;
	//temp.Format(_T("%d"),length);
	//AfxMessageBox(temp);
	if(length!=0)
	{
		m_strDataReceived=CString(data).Left(length);
		m_strReceive+=m_strDataReceived;
		m_strDataReceived=_T("");
		SetDlgItemText(IDC_RECEIVE,m_strReceive);
		m_CtrlReceive.SetSel(m_strReceive.GetLength(),m_strReceive.GetLength(),FALSE);
	}
	return 0;
}

⌨️ 快捷键说明

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