打怪升级之MFC自定义消息的发送、映射与回调
创始人
2024-06-03 18:52:22
0

MFC自定义消息

以最简单的代码,实现最直接的功能:

1.自定义消息:

在resource.h文件中定义:

#define Send                           1234

注意消息本身要避免一些系统的消息ID。

撰写发送函数

你需要在合适的响应地点,发送你的消息。比如,一个socket在接收到消息后马上由PosMessage函数对外发送消息的过程:

void CMFCMSGDlg::OnBnClickedsend()
{// TODO: 在此添加控件通知处理程序代码MessageBox(_T("SendMsg"));::PostMessage(AfxGetMainWnd()->GetSafeHwnd(), Send, (WPARAM)Send, (LPARAM)0);
}

这里的PostMessage就是发送消息的函数。

撰写消息映射

在准备好你的发送消息后,你还需要将消息映射到回调函数上去,具体的方法是去message_map里添加对应的关系绑定:


BEGIN_MESSAGE_MAP(CMFCMSGDlg, CDialogEx)ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(send, &CMFCMSGDlg::OnBnClickedsend)ON_BN_CLICKED(change, &CMFCMSGDlg::OnBnClickedchange)ON_MESSAGE(Send, OnMyCommand)//这里把自定义新消息与新响应回调函数绑定
END_MESSAGE_MAP()

注意的是,使用ON_MESSAGE这一类宏所绑定的回调函数需要满足以下格式:

afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)

回调函数的定义在你的主窗口类中,是附属于你主窗口类的函数。回调函数必须由WPARAM, LPARAM这两个参数。用户定义消息是不属于标准 Windows WM_MESSAGE 消息的任何消息。 选择消息 ID 时,必须使用 WM_USER (0x0400) 到 0x7FFF 或 WM_APP (0x8000) 到 0xBFFF 范围内的值。

撰写回调函数

在回调函数中,你可以通过this->GetCurrentMessage()函数来获得你所接收到的消息。所接收到的消息一般使用static const MSG*格式用于保存。你可以针对不同的消息进行switch–case判断。

你的回调函数由于上文所述的格式限制,必须返回一个值:

LRESULT CMFCMSGDlg::OnMyCommand(WPARAM wParam, LPARAM lParam)
{//	CCreateContext *pContext = new CCreateContext;STATE_T.SetWindowTextW(_T("RecMessage"));MessageBox(_T("RecMessage"));return LRESULT();
}

当然,你定义了新的消息,新的回调函数,是要去框架类里面注册登记的。

// CMFCMSGDlg 对话框
class CMFCMSGDlg : public CDialogEx
{
// 构造
public:CMFCMSGDlg(CWnd* pParent = nullptr);	// 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_MFC_MSG_DIALOG };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持// 实现
protected:HICON m_hIcon;afx_msg LRESULT OnMyCommand(WPARAM wParam, LPARAM lParam);//你注册登记的函数// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()
public:CStatic STATE_T;CButton SEND_B;CButton CHANGE_B;afx_msg void OnBnClickedsend();afx_msg void OnBnClickedchange();
};

实际效果:

在这里插入图片描述

相关内容

热门资讯

求经典台词和经典旁白 求经典台词和经典旁白谁有霹雳布袋戏里的经典对白和经典旁白啊?朋友,你尝过失去的滋味吗? 很多人在即将...
小王子第二章主要内容概括 小王子第二章主要内容概括小王子第二章主要内容概括小王子第二章主要内容概括
爱情睡醒了第15集里刘小贝和项... 爱情睡醒了第15集里刘小贝和项天骐跳舞时唱的那首歌是什么谢谢开始找舞伴的时候是林俊杰的《背对背拥抱》...
世界是什么?世界是什么概念?可... 世界是什么?世界是什么概念?可以干什么?物质的和意识的 除了我们生活的地方 比方说山 河 公路 ...
全职猎人中小杰和奇牙拿一集被抓 全职猎人中小杰和奇牙拿一集被抓动画片是第五十九集,五十八集被发现,五十九被带回基地,六十逃走
“不周山”意思是什么 “不周山”意思是什么快快快快......一座山,神话里被共工撞倒了。
《揭秘》一元一分15张跑得快群... 一元一分麻将群加群主微【ab120590】【tj525555】 【mj120590】等风也等你。喜欢...
玩家必看手机正规红中麻将群@2... 好运连连,全网推荐:(ab120590)(mj120590)【tj525555】-Q号:(QQ443...
始作俑者15张跑的快群@24小... 微信一元麻将群群主微【ab120590】 【tj525555】【mj120590】一元一分群内结算,...
《重大通知》24小时一元红中麻... 加V【ab120590】【tj525555】【mj120590】红中癞子、跑得快,等等,加不上微信就...
盘点一下正规一块红中麻将群@2... 一元一分麻将群加群主微:微【ab120590】 【mj120590】【tj525555】喜欢手机上打...
(免押金)上下分一元一分麻将群... 微【ab120590】 【mj120590】【tj525555】专业麻将群三年房费全网最低,APP苹...
[解读]正规红中麻将跑的快@群... 微信一元麻将群群主微【ab120590】 【tj525555】【mj120590】一元一分群内结算,...
《普及一下》全天24小时红中... 微【ab120590】 【mj120590】【tj525555】专业麻将群三年房费全网最低,APP苹...
优酷视频一元一分正规红中麻将... 好运连连,全网推荐:(ab120590)(mj120590)【tj525555】-Q号:(QQ443...
《火爆》加入附近红中麻将群@(... 群主微【ab120590】 【mj120590】【tj525555】免带押进群,群内跑包包赔支持验证...
《字节跳动》哪里有一元一分红中... 1.进群方式-[ab120590]或者《mj120590》【tj525555】--QQ(QQ4434...
全网普及红中癞子麻将群@202... 好运连连,全网推荐:(ab120590)(mj120590)【tj525555】-Q号:(QQ443...
「独家解读」一元一分麻将群哪里... 1.进群方式《ab120590》或者《mj120590》《tj525555》--QQ(4434063...
通知24小时不熄火跑的快群@2... 1.进群方式《ab120590》或者《mj120590》《tj525555》--QQ(4434063...