打怪升级之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();
};

实际效果:

在这里插入图片描述

相关内容

热门资讯

乐高乐园保姆级攻略来了!收藏这... 转自:上观新闻来源:上观新闻作者:狄斐流程编辑:u028 ...
特朗普签署“大而美”税收和支出... 新华社纽约7月4日电(记者徐兴堂)美国总统特朗普4日下午签署“大而美”税收和支出法案,标志着这一备受...
权威发布|更大范围释放制度创新... 转自:中工网人民日报记者 王珂日前,国务院印发《关于做好自由贸易试验区全面对接国际高标准经贸规则推进...
00后男大学生购买10粒迷奸药... 昨天(7月4日),记者从厦门市中级人民法院获悉,一名在校男大学生通过某迷奸群聊内卖家购买10粒含三唑...
突发:台湾接连地震 根据台湾气象部门消息,7月5日早晨,台湾花莲外海发生两起地震。第一起地震发生在7时12分,震级4.6...
华福证券迎来新任掌舵人!   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会! 黄德良,男,1973...
吴晓波×李斌:一场关于中国智能... 来源:吴晓波频道CHANNELWU在全球汽车产业加速变革的今天,中国智能电动汽车产业正以惊人的“中国...
哈萨克斯坦“霍尔果斯-东门”无... 来源:新华社新华社阿拉木图7月4日电(记者郑钰)当地时间4日上午,哈萨克斯坦“霍尔果斯-东门”无水港...
云南就业补贴怎么申请(大学毕业... 为了更好地支持大学生创业,营造良好的创业氛围,促进创业和就业,会泽县计划在2021年选择6个大学生创...
小店面适合哪些小生意(创业小本... 现在人们倾向于做一些小生意,所以他们也想让我们推荐他们。所以今天就和大家分享下五个小生意,让大家如果...