www.pudn.com > Comtestdlg.rar > ComtestDlg.cpp
// ComtestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Comtest.h"
#include "ComtestDlg.h"
#include "afxtempl.h" //模板
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define IDS_MAILADDR _T("mailto:Zhaoem82@163.com") // Email
/////////////////////////////////////////////////////////////////////////////
// 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:
CHyperLink m_ABEMailLink; //超键接收效果的Static
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
//}}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
DDX_Control(pDX, IDC_ABEMAILLINK, m_ABEMailLink);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_ABEMailLink.SetURL(IDS_MAILADDR);
m_ABEMailLink.SetUnderline(CHyperLink::ulAlways);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/////////////////////////////////////////////////////////////////////////////
// CComtestDlg dialog
CComtestDlg::CComtestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CComtestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CComtestDlg)
m_strRXData = _T("");
m_strTXData = _T("");
m_bAutoSend = FALSE;
m_nCom = -1;
m_nBtl = -1;
m_nSgw = -1;
m_nStopb = -1;
m_nXyw = -1;
m_nSendTime = 0;
m_strComStatus = _T("");
m_strRxCount = _T("");
m_strTxCount = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
//对话框不要下面语句才能使用动态图标
// m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// End Rajesh Parikh (MCSD)
m_bmpLedOff.LoadBitmap(IDB_LEDOFF);
m_bmpLedOn.LoadBitmap (IDB_LEDON);
}
void CComtestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CComtestDlg)
DDX_Control(pDX, IDC_COMLED, m_ctrlComLed);
DDX_Control(pDX, IDC_COMSTATUS, m_ctrlComStatus);
DDX_Control(pDX, IDC_EDIT_RXDATA, m_ctrlRxData);
DDX_Control(pDX, IDC_COMCONCTRL, m_ctrlComctl);
DDX_Control(pDX, IDC_CHECK_HEXDISPLAY, m_ctrlHexDisplay);
DDX_Control(pDX, IDC_CHECK_HEXSEND, m_ctrlHexSend);
DDX_Text(pDX, IDC_EDIT_RXDATA, m_strRXData);
DDX_Text(pDX, IDC_EDIT_TXDATA, m_strTXData);
DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
DDX_Check(pDX, IDC_AUTOSEND, m_bAutoSend);
DDX_CBIndex(pDX, IDC_SETCOM, m_nCom);
DDX_CBIndex(pDX, IDC_SETBTL, m_nBtl);
DDX_CBIndex(pDX, IDC_SETSGW, m_nSgw);
DDX_CBIndex(pDX, IDC_SETSTOPB, m_nStopb);
DDX_CBIndex(pDX, IDC_SETXYW, m_nXyw);
DDX_Text(pDX, IDC_SENDTIME, m_nSendTime);
DDX_Text(pDX, IDC_COMSTATUS, m_strComStatus);
DDX_Text(pDX, IDC_RXCOUNT, m_strRxCount);
DDX_Text(pDX, IDC_TXCOUNT, m_strTxCount);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CComtestDlg, CDialog)
//{{AFX_MSG_MAP(CComtestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_TIMER()
ON_WM_CREATE()
ON_WM_DESTROY()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_BUTTON_MANUALSEND, OnButtonManualsend)
ON_BN_CLICKED(IDC_AUTOSEND, OnAutosend)
ON_CBN_SELCHANGE(IDC_SETCOM, OnSelchangeSetcom)
ON_CBN_SELCHANGE(IDC_SETBTL, OnSelchangeSetbtl)
ON_CBN_SELCHANGE(IDC_SETSGW, OnSelchangeSetsgw)
ON_CBN_SELCHANGE(IDC_SETSTOPB, OnSelchangeSetstopb)
ON_CBN_SELCHANGE(IDC_SETXYW, OnSelchangeSetxyw)
ON_EN_UPDATE(IDC_SENDTIME, OnUpdateSendtime)
ON_BN_CLICKED(IDC_COMCONCTRL, OnCtrlCom)
ON_BN_CLICKED(IDC_RESCOUNT, OnRescount)
ON_BN_CLICKED(IDC_CLEARRXDATA, OnClearrxdata)
ON_BN_CLICKED(IDC_CLEARTXDATA, OnCleartxdata)
ON_BN_CLICKED(IDC_OPENSENDFILE, OnOpensendfile)
ON_BN_CLICKED(IDC_SAVEDATA, OnSavedata)
ON_WM_SIZING()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//一组宏完成对话框resize后控件位置和大小
BEGIN_EASYSIZE_MAP(CComtestDlg)
EASYSIZE(IDC_EDIT_RXDATA,ES_BORDER,ES_BORDER,ES_BORDER,ES_BORDER,0)
EASYSIZE(IDC_STATIC1,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC2,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC3,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC4,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC5,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC6,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC7,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC8,ES_BORDER,IDC_EDIT_RXDATA,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_STATIC9,ES_BORDER,IDC_EDIT_RXDATA,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_SETCOM,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_SETBTL,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_SETXYW,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_SETSGW,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_SETSTOPB,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_COMCONCTRL,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_HEXDISPLAY,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_CLEARRXDATA,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_OPENSENDFILE,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_SAVEDATA,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_CHECK_HEXSEND,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_CLEARTXDATA,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_AUTOSEND,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_SENDTIME,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_BUTTON_MANUALSEND,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_EDIT_TXDATA,ES_BORDER,IDC_EDIT_RXDATA,ES_BORDER,ES_KEEPSIZE,0)
EASYSIZE(IDC_COMSTATUS,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_TXCOUNT,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_RXCOUNT,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_RESCOUNT,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
EASYSIZE(IDC_COMLED,ES_BORDER,IDC_EDIT_RXDATA,ES_KEEPSIZE,ES_KEEPSIZE,0)
END_EASYSIZE_MAP
/////////////////////////////////////////////////////////////////////////////
// CComtestDlg message handlers
BOOL CComtestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// 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);
}
}
//m_EMailLink.setbk
//设置接收框位置
RECT CRect;
GetWindowRect(&CRect);
m_ctrlRxData.MoveWindow (0,0,CRect.right-12,270,TRUE);
INIT_EASYSIZE; //一组宏完成对话框resize后控件位置和大小
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialo
//注消以下两行
//SetIcon(m_hIcon, TRUE); // Set big icon
// SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
//对话框初始化
m_nCom=0; //串口1
m_nBtl=5; //波特率 9600
m_nSgw=2; //数据位 8位
m_nStopb=0; //停止位 1位
m_nXyw=0; //校验位 NONE
m_nSendTime=1000; //定时发送时间
m_bCtrlCom=0; //串口置关闭状态
m_nTxCount=0; //发送计数
m_nRxCount=0; //接收计数
m_strTxCount.Format("TX:%d",m_nTxCount); //发送计数显示
m_strRxCount.Format("RX:%d",m_nRxCount); //接收计数显示
UpdateData(FALSE); //更新显示
// 串口初始化
m_ctrlComm.SetCommPort(1); //设置串口
if(!m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(TRUE); //打开串口
m_bCtrlCom=1; //串口置打开状态
m_ctrlComctl.SetWindowText("关闭串口");
m_ctrlComLed.SetBitmap (m_bmpLedOn);
}
else
{
AfxMessageBox("没有发现串口");
m_bCtrlCom=0; //串口置关闭状态
m_ctrlComctl.SetWindowText("打开串口");
m_ctrlComLed.SetBitmap (m_bmpLedOff);
}
//m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
ChangeCom(); //设置串口状态改变串口状态
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
return TRUE; // return TRUE unless you set the focus to a control
}
void CComtestDlg::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 CComtestDlg::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 CComtestDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CComtestDlg::OnTimer(UINT nIDEvent)
{
switch(nIDEvent)
{
case 99: //改变窗口图标
m_animIcon.ShowNextImage();break;
case 1:
OnButtonManualsend();break; //定时到发送
}
}
int CComtestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
m_animIcon.SetImageList(IDB_ANIM_IMGLIST,4,RGB(0,0,0));
// set the timer to fire every .5 seconds
m_timerID = this->SetTimer(99,100,NULL);
return 0;
}
void CComtestDlg::OnDestroy()
{
CDialog::OnDestroy();
if(m_timerID != 0)
KillTimer(m_timerID);
}
void CComtestDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
UPDATE_EASYSIZE; //一组宏完成对话框resize后控件位置和大小
}
void CComtestDlg::OnButtonManualsend()
{
// TODO: Add your control notification handler code here
int TempCount;
UpdateData(TRUE); //读取编辑框内容
if(m_ctrlHexSend.GetCheck())
{
CByteArray hexdata;
int len=String2Hex(m_strTXData,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数
m_ctrlComm.SetOutput(COleVariant(hexdata)); //发送十六进制数据
//更新发送计数
TempCount=m_strTXData.GetLength(); //取发送数据长度
m_nTxCount+=TempCount; //发送计数
m_strTxCount.Format("TX:%d",m_nTxCount);
UpdateData(FALSE); //更新编辑框内容
}
else
{
m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送ASCII字符数据
//更新发送计数
TempCount=m_strTXData.GetLength(); //取发送数据长度
m_nTxCount+=TempCount; //发送计数
m_strTxCount.Format("TX:%d",m_nTxCount);
UpdateData(FALSE); //更新编辑框内容
}
}
BEGIN_EVENTSINK_MAP(CComtestDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CComtestDlg)
ON_EVENT(CComtestDlg, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CComtestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k=len)
break;
lstr=str[i];
hexdata=ConvertHexChar(hstr);
lowhexdata=ConvertHexChar(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
senddata[hexdatalen]=(char)hexdata;
hexdatalen++;
}
senddata.SetSize(hexdatalen);
return hexdatalen;
}
char CComtestDlg::ConvertHexChar(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else return (-1);
}
void CComtestDlg::OnAutosend()
{
// TODO: Add your control notification handler code here
m_bAutoSend=!m_bAutoSend;
if(m_bAutoSend)
{
UpdateData(TRUE); //读取对话框内容
TRACE("%d\n",m_nSendTime);
SetTimer(1,m_nSendTime,NULL);//设置自动发送时间
}
else
{
KillTimer(1); //取消定时
}
}
//选择串口号
void CComtestDlg::OnSelchangeSetcom()
{
// TODO: Add your control notification handler code here
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE); //如果串口打开则关闭串口
UpdateData(TRUE); //读取串口号
m_bCtrlCom=0; //串置关闭状态
m_ctrlComLed.SetBitmap (m_bmpLedOff);
m_strComStatus.Empty();
UpdateData(FALSE); //更新编辑框内容
// if(m_ctrlComm.GetPortOpen())
// m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(m_nCom+1); //设置串口
if( !m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(TRUE); //打开串口
m_ctrlComctl.SetWindowText("关闭串口");
m_bCtrlCom=1; //串口置打开状态
m_ctrlComLed.SetBitmap (m_bmpLedOn);
}
else
{
m_ctrlComctl.SetWindowText("打开串口");
AfxMessageBox("没有发现串口");
m_bCtrlCom=0; //串置关闭状态
m_ctrlComLed.SetBitmap (m_bmpLedOff);
}
ChangeCom();
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}
//选择波特率
void CComtestDlg::OnSelchangeSetbtl()
{
// TODO: Add your control notification handler code here
ChangeCom(); //改变串口状态
}
//选择数据位
void CComtestDlg::OnSelchangeSetsgw()
{
// TODO: Add your control notification handler code here
ChangeCom();
}
//选择停止位
void CComtestDlg::OnSelchangeSetstopb()
{
// TODO: Add your control notification handler code here
ChangeCom();
}
//选择校验位
void CComtestDlg::OnSelchangeSetxyw()
{
// TODO: Add your control notification handler code here
ChangeCom();
}
//将串口选择列表框内容转换设置串口参数,并设置串口参数据(串口号除外)
void CComtestDlg::ChangeCom()
{
UpdateData(TRUE); //读取控位数据
switch (m_nBtl)
{
case 0 : m_nSBtl=300; break;
case 1 : m_nSBtl=600; break; //波特率
case 2 : m_nSBtl=1200; break;
case 3 : m_nSBtl=2400; break;
case 4 : m_nSBtl=4800; break;
case 5 : m_nSBtl=9600; break;
case 6 : m_nSBtl=19200; break;
case 7 : m_nSBtl=38400; break;
case 8 : m_nSBtl=43000; break;
case 9 : m_nSBtl=56000; break;
case 10: m_nSBtl=56700; break;
case 11: m_nSBtl=115200; break;
default:break;
}
switch(m_nXyw)
{
case 0:m_cSXyw='n';break;
case 1:m_cSXyw='o';break; //校验位
case 2:m_cSXyw='e';break;
default:break;
}
switch(m_nSgw)
{
case 0:m_nSSgw=6;break;
case 1:m_nSSgw=7;break;
case 2:m_nSSgw=8;break; //数据位
default:break;
}
switch(m_nStopb)
{
case 0:m_nSStopb=1;break;
case 1:m_nSStopb=2;break; //停止位
default:break;
}
CString SettingCom;
SettingCom.Format("%d,%c,%d,%d",m_nSBtl,m_cSXyw,m_nSSgw,m_nSStopb);
TRACE(SettingCom);
m_ctrlComm.SetSettings(SettingCom); //修改串口参数
UpdataStatus(); //显示串口状态
}
//设置自动发送时间
void CComtestDlg::OnUpdateSendtime()
{
if(m_bAutoSend)
{
UpdateData(TRUE); //读取对话框内容
TRACE("%d\n",m_nSendTime);
AfxMessageBox("m_nSendTime");
SetTimer(1,m_nSendTime,NULL);//设置自动发送时间
}
}
void CComtestDlg::OnCtrlCom() //串口状态控制(打开或关闭串口)
{
// TODO: Add your control notification handler code here
if (m_bCtrlCom)
{
m_ctrlComctl.SetWindowText("打开串口");
m_ctrlComm.SetPortOpen(FALSE);
m_bCtrlCom=0; //串口置关闭状态
m_ctrlComLed.SetBitmap (m_bmpLedOff);
}
else
{
m_ctrlComctl.SetWindowText("关闭串口");
m_ctrlComm.SetPortOpen(TRUE);
m_bCtrlCom=1; //串口置关闭状态
m_ctrlComLed.SetBitmap (m_bmpLedOn);
}
UpdataStatus(); //显示串口状态
}
void CComtestDlg::UpdataStatus() //更新串口状态显示
{
if(m_bCtrlCom) //判断串口状态(打开或关闭)
{
m_strComStatus.Format("状态:COM %d 打开,%6d,%c,%d,%d",m_nCom+1,m_nSBtl,m_cSXyw,m_nSSgw, m_nSStopb);
}
else
{
m_strComStatus.Format("状态:COM %d 关闭,%6d,%c,%d,%d",m_nCom+1,m_nSBtl,m_cSXyw,m_nSSgw, m_nSStopb);
}
UpdateData(FALSE); //更新编辑框内容
}
void CComtestDlg::OnRescount() // 复位计数
{
// TODO: Add your control notification handler code here
m_nTxCount=0; //发送计数
m_nRxCount=0; //接收计数
m_strTxCount.Format("TX:%d",m_nTxCount); //发送计数显示
m_strRxCount.Format("TX:%d",m_nRxCount); //接收计数显示
UpdateData(FALSE); //更新显示
}
void CComtestDlg::OnClearrxdata() //清空接收缓冲区
{
m_strRXData.Empty();
UpdateData(FALSE); //更新显示
}
void CComtestDlg::OnCleartxdata() //清空发送缓区
{
m_strTXData.Empty();
UpdateData(FALSE); //更新显示
}
void CComtestDlg::OnOpensendfile() //打开发送文件
{
CFileDialog mFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|
OFN_ALLOWMULTISELECT,"文本文件(*.txt)|*.txt|All Files(*.*)|*.*||",AfxGetMainWnd());
mFileDlg.DoModal ();
CString FileName;
FileName=mFileDlg.GetPathName();
CStdioFile mFile;
CFileException mExcept;
if(mFile.Open( FileName, CFile::modeRead, &mExcept)==0)
{
return;
}
m_strRXData.Empty(); //清空接收缓冲区
CString strLine;
while(mFile.ReadString(strLine))
{
m_strTXData+=strLine;
m_strTXData+=0x0d; //加入换行标志
m_strTXData+=0x0d;
m_strTXData+=0x0a;
}
mFile.Close();
UpdateData(FALSE); //更新显示
//OnButtonManualsend(); //发送数据
}
void CComtestDlg::OnSavedata() //保存接收数据
{
CFileDialog mFileDlg(FALSE,"txt",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|
OFN_ALLOWMULTISELECT,"文本文件(*.txt)|*.txt|All Files(*.*)|*.*||",AfxGetMainWnd());
mFileDlg.DoModal ();
CString FileName;
FileName=mFileDlg.GetPathName();
CStdioFile mFile;
CFileException mExcept;
if(mFile.Open(FileName, CFile::modeCreate|CFile::modeWrite, &mExcept)==0)
{
return;
}
mFile.WriteString(m_strRXData);
mFile.Close();
}
void CComtestDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
EASYSIZE_MINSIZE(630,500,fwSide,pRect); //设置最小尺寸
}