S 串口编程 详解1 串口通信工程SCOMM的建立、MFC消息映射机制

串口编程 详解1

最近在一个小应用中要用到串口接收和发送数据。所以就参考一书整了个串口调试助手练练手(结果如下图,不是很美观,有些控件是可以更换成更合理的控件的)


1、建立基于对话框的工程SCOMM(Serial communication)。

2、在对话框中添加控件并设置控件属性

3、添加类文件(这里主要是指CSerialPort类,包括:SerialPort.h和SerialPort.cpp文件,在两文件在下一博文专门给出)。在SCOMMDlg.h中使用#include“SerialPort.h”包含进CSerialPort类。

4、完成串口消息处理函数OnCommunication.

添加WM_COMM_RXCHAR消息,这个消息的添加本以为可以用向导,可是不行,得手动。//在SCOMMDlg.h : header file中添加响应函数。

	//{{AFX_MSG(CSCOMMDlg)

	afx_msg LONG OnCommunication(WPARAM ch,LPARAM port);  
	
	//}}AFX_MSG
       DECLARE_MESSAGE_MAP()
在// SCOMMDlg.cpp : implementation file中添加WM_COMM_RXCHAR消息映射
//消息映射
BEGIN_MESSAGE_MAP(CSCOMMDlg, CDialog)
	//{{AFX_MSG_MAP(CSCOMMDlg)	
	ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
在// SCOMMDlg.cpp : implementation file中添加OnCommunication( )实现函数如下:(怎不添加代码)

LONG CSCOMMDlg::OnCommunication(WPARAM ch,LPARAM port)
{
	return 0;
}

在完成串口消息处理函数OnCommunication中,我们是可以看到MFC的映射机制的:

首先,在头文件中声明消息响应函数afx_msg  函数返回类型   函数名

其次,在实现文件添加消息映射(说白了,就 是 来了   某种消息   则 应该执行某对应的函数以实现某个动作)

   如ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication), 表如果来了WM_COMM_RXCHAR这个消息,则去执行OnCommunication这个函数

   又如ON_BN_CLICKED(IDC_BUTTON_OPENPORT, OnButtonOpenport),表来了单击“打开串口”这个按钮时就会来个IDC_BUTTON_OPENPORT消息,这个消息来了之后就去执行OnButtonOpenport函数。

最后,刚才说到消息对应到函数,这里就得把刚才那个函数实现了。如LONG CSCOMMDlg::OnCommunication(WPARAM ch,LPARAM port){  return 0; }


补充一点:刚才在说到的:在对话框中添加控件并设置控件属性,这个过程是不仅涉及到消息映射问题。还是涉及到数据的映射。

如刚才的提到的“打开串口”按钮

下面是是把IDC_BUTTON_OPENPORT这个ID和m_ctrlOpenPort变量映射起来

void CSCOMMDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//数据映射(按钮、编辑框 与 变量的映射)
	//{{AFX_DATA_MAP(CSCOMMDlg)
	
	DDX_Control(pDX, IDC_BUTTON_OPENPORT, m_ctrlOpenPort);
	
	//}}AFX_DATA_MAP
}
下面是把单击IDC_BUTTON_OPENPORT这个消息和OnButtonOpenport映射起来。

//消息映射
BEGIN_MESSAGE_MAP(CSCOMMDlg, CDialog)
	//{{AFX_MSG_MAP(CSCOMMDlg)

	ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)

	ON_BN_CLICKED(IDC_BUTTON_OPENPORT, OnButtonOpenport)
	
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gdliweibing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值