一、简介
最近用到了获取,串口消息,消息处理主要用到了微软的<afxwin.h>头文件的afx_msg类。先调研一番消息处理函数,然后举例说明。
二、什么是消息处理函数
afx_msg主要在MFC中应用,比较古老了。消息函数主要用到afx_msg关键字来定义。
https://blog.csdn.net/holandstone/article/details/7452384
https://www.cnblogs.com/linkzijun/p/6196165.html
这几篇博客完美的解析了afx_msg关键字。
三、消息处理函数的应用
参看https://www.cnblogs.com/linkzijun/p/6196165.html
——>比如MFC中,按钮的点击消息。
四、工程中用的消息
1、.h文件中定义消息
LRESULT——表示长整数(默认)
WPARAM——表示长整数(默认)
LPARAM——表示短整数(默认)
2、启动消息
BEGIN_MESSAGE_MAP——启动消息,KGenDel表示类。CDialogEx是系统生成了不知道啥意思。
ON_MESSAGE(WM_COMM_RXCHAR, &KGenDel::OnComm)//通过WM_COMM_RXCHAR与串口关联起来,一旦接收串口类的指令,则响应消息OnComm。事件上,OnComm是KGenDel.cpp的函数。
END_MESSAGE_MAP()——关闭
3、 消息函数的实现
定时器发消息给串口:
接收来自串口的消息:
//消息响应函数:
LRESULT KGenDel::OnComm(WPARAM ch, LPARAM port)
{
if (16 > ch)
{
str.Format(_T("0%X "), ch);
}
else
{
str.Format(_T("%X "), ch);
}
m_RecvBuf += str;
data[cnt] = ch;
cnt++;
BYTE *p = (BYTE*)&data;
if (136 == data[12] && 240 == data[0]) //函数发送短命令
{
m_cLogger.WriteDebugLog("KGenDel::OnComm: 命令解析开始 ", 200);
m_cLogger.WriteDebugLog("KGenDel:: OnComm: " + m_RecvBuf, 200);
m_RecvBuf.ReleaseBuffer(); //第一步清空函数内存,保证存取上一次数据
m_RecvBuf.Empty(); //第二步清空函数内存,强制设置为空
m_cLogger.WriteDebugLog("KGenDel::OnComm: 命令结束", 200);
}
if (136 == data[18] && 240 == data[0]) //函数发送长命令
{
m_cLogger.WriteDebugLog("KGenDel::OnComm: 命令解析开始 ", 200);
m_cLogger.WriteDebugLog("KGenDel:: OnComm: " + m_RecvBuf, 200);
m_RecvBuf.ReleaseBuffer();
m_RecvBuf.Empty();
m_cLogger.WriteDebugLog("KGenDel::OnComm: 命令结束", 200);
}
OnComm1();
return 0;
}
4、串口类中,包含了WM_COMM_RXCHAR(虽然不知道串口怎么关联消息)