职业教育新东方网 > 职业教育 > 计算机 > 微软认证 > 备考辅导 > MCSD指导 > 文章正文

深入浅出VC++串口之第三方类(下)

分享到:

2011-09-24 11:40  作者:  来源:考试大 - 微软认证考试  字号:T|T


  我们需要为串口的接收事件定义一个用户消息ON_COM_RECEIVE,因此对话框的消息映射为:

 

BEGIN_MESSAGE_MAP(CSerialPortClassDlg, CDialog)
//{{AFX_MSG_MAP(CSerialPortClassDlg)
 ON_WM_SYSCOMMAND()
 ON_WM_PAINT()
 ON_WM_QUERYDRAGICON()
 ON_BN_CLICKED(IDC_CLEAR_BUTTON, OnClearButton)
 ON_BN_CLICKED(IDC_SEND_BUTTON, OnSendButton)
 ON_MESSAGE(ON_COM_RECEIVE,OnCommRecv)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()


  同时,我们需要在对话框类的头文件中定义cnComm类的成员变量com和接收数据消息处理函数OnCommRecv:

 

cnComm com;
afx_msg void OnCommRecv(WPARAM wParam, LPARAM lParam);




 

BOOL CSerialPortClassDlg::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);
  }
 }

 // Set the icon for this dialog. The framework does this automatically
 // when the application's main window is not a dialog
 SetIcon(m_hIcon, TRUE); // Set big icon
 SetIcon(m_hIcon, FALSE); // Set small icon

 // TODO: Add extra initialization here

 com.Open(1); //打开串口1并使用默认设置
 com.SetWnd(AfxGetMainWnd()->m_hWnd); //设置消息处理窗口

 return TRUE; // return TRUE unless you set the focus to a control
}


  发送字符串的过程很简单,只需要调用cnComm类的Write函数:

 

//"发送"按钮函数(完成数据的发送功能)
void CSerialPortClassDlg::OnSendButton()
{
 // TODO: Add your control notification handler code here
 UpdateData(true);

 com.Write(m_send); //发送字符串
}


  接收字符串的过程也很简单,只需要调用cnComm类的ReadString函数:

 

void CSerialPortClassDlg::OnCommRecv(WPARAM wParam, LPARAM lParam)
{
 UpdateData(true);

 //读取串口上的字符
 char str[100];
 com.ReadString(str, 100);
 m_recv += str;

 UpdateData(false);
}


  读者朋友们这时一定会发出感慨:使用cnComm类后,进行串口数据收发的程序是多么简单啊!的确,串口的初始化、读写几乎都是用1~2条语句搞定的!

  这就是我们要特别用一次连载来讲述使用第三方类来进行串口通信的原因。实际上,笔者在进行网络通信程序编程时,也不认为MS提供的CSocket类是最方便的选择,照样习惯使用第三方的网络通信类。它们的确有非常简洁明快的接口,这一点也是值得MS哥哥们学习的。

(实习编辑 陈龙)

热点课讯

精彩问答

提问