📄 dopoddlg.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 + -