开发环境:vs 2005
代码如下:
// test1Dlg.cpp : 实现文件
#include "stdafx.h"
#include "test1.h"
#include "test1Dlg.h"
//#include
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//CEdit test1=(CEdit *)GetDlgItem(IDC_)
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// Ctest1Dlg 对话框
Ctest1Dlg::Ctest1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(Ctest1Dlg::IDD, pParent)
, DD(_T(""))
, kk(0)
, cc(FALSE)
, s(false)
, d2(FALSE)
, ss(false)
, m_combo1(0)
, cedit(0)
, text_rx(_T(""))
, text_tx(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void Ctest1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, DD);
DDX_Text(pDX, IDC_EDIT2, kk);
DDX_Control(pDX, IDC_CHECK1, check);
DDX_Check(pDX, IDC_CHECK1, cc);
DDX_Check(pDX, IDC_CHECK2, d2);
DDX_Control(pDX, IDC_SLIDER1, slider);
DDX_Control(pDX, IDC_BUTTON1, s3);
DDX_Control(pDX, IDC_COMBO1, combo1);
DDX_CBIndex(pDX, IDC_COMBO1, m_combo1);
DDX_Text(pDX, IDC_EDIT3, cedit);
DDX_Control(pDX, IDC_MSCOMM1, m_ctrlcomm);
DDX_Text(pDX, IDC_EDIT4, text_rx);
DDX_Text(pDX, IDC_EDIT5, text_tx);
DDX_Control(pDX, IDC_COMBO2, combo2);
DDX_Control(pDX, IDC_COMBO3, combo3);
DDX_Control(pDX, IDC_COMBO4, combo4);
DDX_Control(pDX, IDC_COMBO5, combo5);
DDX_Control(pDX, IDC_BUTTON5, b_open_com);
DDX_Control(pDX, IDC_CHECK4, tx_mode_hex);
}
BEGIN_MESSAGE_MAP(Ctest1Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_RADIO1, &Ctest1Dlg::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_BUTTON1, &Ctest1Dlg::OnBnClickedButton1)
ON_EN_CHANGE(IDC_EDIT4, &Ctest1Dlg::OnEnChangeEdit4)
ON_BN_CLICKED(IDC_BUTTON2, &Ctest1Dlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &Ctest1Dlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &Ctest1Dlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &Ctest1Dlg::OnBnClickedButton5)
//ON_MESSAGE(ON_WM_TIMER,&Ctest1Dlg::SetTimer(1,1000,NULL);
ON_BN_CLICKED(IDC_BUTTON6, &Ctest1Dlg::OnBnClickedButton6)
END_MESSAGE_MAP()
// Ctest1Dlg 消息处理程序
BOOL Ctest1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
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);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
ShowWindow(SW_MINIMIZE);
// TODO: 在此添加额外的初始化代码
//黄色代码为测试控件用
cc = TRUE;
d2=true;
s=FALSE;
ss=true;
int x=100;
((CButton *)GetDlgItem ( IDC_RADIO1))->SetCheck( TRUE );
slider.SetRange(0,100);//设置滑动范围
slider.SetTicFreq(10);//设置滑动的刻度(步进值)
//slider.SetPos(23);//设置当前滑度
//初始化串口选择下拉框
combo2.InsertString(0,_T("COM1"));
combo2.InsertString(1,_T("COM2"));
combo2.InsertString(2,_T("COM3"));
combo2.InsertString(3,_T("COM4"));
combo2.InsertString(4,_T("COM5"));
combo2.InsertString(5,_T("COM6"));
combo2.InsertString(6,_T("COM7"));
combo2.InsertString(7,_T("COM8"));
combo2.InsertString(8,_T("COM9"));
((CComboBox*)GetDlgItem(IDC_COMBO2))->SetCurSel(0);//设置第0行内容为显示的内容
//初始化波特率选择下拉框
combo1.InsertString(0,_T("9600"));
combo1.InsertString(1,_T("4800"));
combo1.InsertString(2,_T("1200"));
combo1.InsertString(3,_T("115200"));
//combo1.SetCurSel(2);
((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(2);//设置第2行内容为显示的内容
//初始化校验位下拉框
combo3.InsertString(0,_T("E"));
combo3.InsertString(1,_T("O"));
combo3.InsertString(2,_T("N"));
combo3.SetCurSel(2);
//初始化数据位下拉框
combo4.InsertString(0,_T("8"));
combo4.InsertString(1,_T("7"));
combo4.InsertString(2,_T("6"));
combo4.SetCurSel(0);//设置第0行内容为显示内容
//初始化停止位下拉框
combo5.InsertString(0,_T("2"));
combo5.InsertString(1,_T("1"));
combo5.SetCurSel(1);//设置第1行内容为显示内容
m_ctrlcomm.put_InBufferSize(1024);//设定串口发送数据缓冲区大小
m_ctrlcomm.put_OutBufferSize(1024);//设定串口接收数据缓冲区大小
m_ctrlcomm.put_InputLen(0);//设置当前接收区数据为0表示全部读取
m_ctrlcomm.put_InputMode(1);//以二进制方式读取数据
m_ctrlcomm.put_RThreshold(1);//当接收缓冲区有1个或以上数据时读取
CString x1,x2,x3,x4,x5,com_setings;
UINT8 n_com;
combo2.GetWindowText(x2);//获取当前选择串口号
x2=x2.Mid(3,1);
n_com=_ttoi((x2));
m_ctrlcomm.put__CommPort(n_com);//设定使用串口1
combo1.GetWindowText(x1);//获取当前波特率
combo3.GetWindowText(x3);//获取当期奇偶校验位
combo4.GetWindowText(x4);//获取当前数据位
combo5.GetWindowText(x5);//获取当前停止位
com_setings=x1+','+x3+','+x4+','+x5;
//m_ctrlcomm.put_Settings(_T("9600,N,8,1"));//设定波特率9600无检验位,8个数据位,1个停止位
m_ctrlcomm.put_Settings((com_setings));
text_tx="Text ok!\r\n";
if (m_ctrlcomm.get_PortOpen())//如果串口是打开的
{
m_ctrlcomm.put_PortOpen(FALSE);//关闭串口
}
else//如法打开则提示错误
{
}
//m_ctrlcomm.get_Input();
//Sleep(3000);
UpdateData(FALSE);//更新输出
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void Ctest1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void Ctest1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
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;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR Ctest1Dlg::OnQueryDragIcon()
{
return static_cast(m_hIcon);
}
void Ctest1Dlg::OnBnClickedRadio1()
{
// TODO: 在此添加控件通知处理程序代码
}
void Ctest1Dlg::OnBnClickedButton1()
{
UpdateData(TRUE);
// TODO: 在此添加控件通知处理程序代码
UpdateData(FALSE);//更新输出
}
BEGIN_EVENTSINK_MAP(Ctest1Dlg, CDialog)
ON_EVENT(Ctest1Dlg, IDC_MSCOMM1, 1, Ctest1Dlg::OnCommMscomm1, VTS_NONE)
END_EVENTSINK_MAP()
//串口接收处理事件
void Ctest1Dlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
// TODO: Add your control notification handler code here
VARIANT variant_input;
COleSafeArray safearray_input;
LONG len,k;
BYTE rxdata[2048];
CString m_strEditRXData;
CString strtemp;
if(m_ctrlcomm.get_CommEvent()==2)
{
variant_input=m_ctrlcomm.get_Input();
safearray_input=variant_input;
len=safearray_input.GetOneDimSize();
m_strEditRXData+=strtemp;
for(k=0;k safearray_input.GetElement(&k,rxdata+k);
for(k=0;k {
BYTE bt=*(char *)(rxdata+k);
strtemp.Format(_T("%c"),bt);
m_strEditRXData+=strtemp;
text_rx+=strtemp;
}
}
UpdateData(FALSE);//更新输出
}
//串口发送按钮
void Ctest1Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);//更新输入
if (tx_mode_hex.GetCheck())
{
//text_tx="yes";
//复选框被选上
}
else
{
//text_tx="no";
//复选框没被选上
}
if (!m_ctrlcomm.get_PortOpen())
{
AfxMessageBox(_T("串口尚未打开!"),MB_OK,0);
}
else
{
m_ctrlcomm.put_Output(COleVariant(text_tx));//发送数据
//m_ctrlcomm.put_Output(COleVariant(s_x));
}
UpdateData(FALSE);//更新输出
}
//清空发送区按钮
void Ctest1Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
text_tx="";//text_tx是文本框的 型变量
UpdateData(FALSE);//更新输出
}
//清空接收区按钮
void Ctest1Dlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
text_rx="";
UpdateData(FALSE);//更新输出
}
//打开串口按钮
void Ctest1Dlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);//更新输入
CString caption;
b_open_com.GetWindowText(caption);
UINT8 flag;
if (caption==_T("打开串口"))
{
flag=1;
b_open_com.SetWindowText(_T("关闭串口"));
}
else if(caption==_T("关闭串口"))
{
flag=0;
b_open_com.SetWindowText(_T("打开串口"));
}
if (flag==1)//打开按钮操作
{
if (!m_ctrlcomm.get_PortOpen())//如果串口是关闭的,打开串口
{
m_ctrlcomm.put_PortOpen(TRUE);
AfxMessageBox(_T("Open Serial Port success!"),MB_OK,0);
//b_open_com.SetWindowText(_T("关闭串口"));
}
else
{
AfxMessageBox(_T("串口已经打开!"),MB_OK,0);
//b_open_com.SetWindowText(_T("打开串口"));
//flag=0;
}
}
else if(flag==0)//关闭串口操作
{
if(m_ctrlcomm.get_PortOpen()==TRUE)//如果串口是打开的
{
AfxMessageBox(_T("close Serial Port success!"),MB_OK,0);
m_ctrlcomm.put_PortOpen(FALSE);//关闭串口
}
else
{
AfxMessageBox(_T("串口尚未打开!"),MB_OK,0);
//m_ctrlcomm
}
}
UpdateData(FALSE);//更新输出
}
//将串口接收区的内容保存成txt文档
void Ctest1Dlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
//获取系统时间
SYSTEMTIME st;
CString strDate,strTime,text_temp;
GetLocalTime(&st);
strDate.Format(_T("DATE:%4d-%2d-%2d "),st.wYear,st.wMonth,st.wDay);
strTime.Format(_T("TIME:%2d:%2d:%2d"),st.wHour,st.wMinute,st.wSecond);
//创建text文件(此种方式不支持中文)
CStdioFile file(_T( "C:\\Test.txt "), CFile::modeCreate | CFile::modeWrite);
text_temp=text_rx;
text_temp=text_temp+strDate+strTime;
file.WriteString(text_temp);
file.WriteString(_T( "\r\n "));
file.Flush();
file.Close();
UpdateData(FALSE);//更新输出
}
软件界面如下:
对c++不熟悉,功能还有待完善..........