C++基础(十五)C++ 的消息处理:afx_msg

一、简介

最近用到了获取,串口消息,消息处理主要用到了微软的<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(虽然不知道串口怎么关联消息)

猜你喜欢

转载自blog.csdn.net/xpj8888/article/details/85858597