Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1966645
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2011-12-17 19:03:14

开发环境: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++不熟悉,功能还有待完善..........
阅读(8341) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~