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

实际效果:

在这里插入图片描述

相关内容

热门资讯

文物界“出差天团”进京!猜猜这... 文物界“出差天团”进京!猜猜这些青铜界顶流会说啥?_北京时间现在上猫眼、美团、大众点评、微信,搜索“...
“十二星座”手动上新 全球首个... 转自:央视今天(14日)12时12分,我国在酒泉卫星发射中心使用长征二号丁运载火箭,成功将太空计算卫...
黑龙江开展全省跨境电商专题培训 转自:新华财经为提高黑龙江省商务主管部门跨境电商业务能力和跨境电商企业经营水平,推动传统外贸企业向跨...
西安鄠邑法院 | “最后一劝”... 保险公司:你在投保时就应当将被保险人之前出现过高热惊厥的病情如实告知给我们。岳鑫:我当时已经向保险业...
冀东水泥(000401.SZ)... 格隆汇5月14日丨冀东水泥(000401.SZ)公布2025年限制性股票激励计划(草案),本计划拟向...
网约车座椅靠背张贴“差评者得癌... 近日,有网友发帖称自己“五一”假期在杭州打网约车观看演唱会时,网约车前排座椅靠背张贴了一张“差评者得...
甘化科工:公司控股子公司沈阳含... 证券日报网讯甘化科工5月14日在互动平台回答投资者提问时表示,公司控股子公司沈阳含能生产的钨合金预制...
FOMC今年票委发话:4月低通... 芝加哥联储主席古尔斯比泼下冷水:最新CPI数据不一定反映出关税的真实影响,或许只是“尘埃飞扬”。芝加...
工行梧州藤县支行成功落地全辖首... 转自:新华财经近期,工行梧州藤县支行深入贯彻落实金融“五篇大文章”的工作部署,落实乡村振兴工作,将普...
爱迪特:公司保持开放态度,持续... 证券日报网讯爱迪特5月14日在互动平台回答投资者提问时表示,公司保持开放态度,持续关注口腔医疗及相关...
中航西飞:公司及子公司陕飞依托... 证券日报网讯中航西飞5月14日在互动平台回答投资者提问时表示,公司及子公司陕飞依托大中型飞机平台,持...
济宁市交通强国山东示范区建设推... 转自:济宁政务5月14日上午,济宁市交通强国山东示范区建设推进会议召开。济宁市委书记温金荣出席并讲话...
小马智行创始人自愿延长锁定期5... 5月14日,小马智行(NASDAQ:PONY)宣布,董事会主席、联合创始人、CEO彭军,以及联合创始...
北京博物馆头部达人联盟成立 5月14日,在“5·18国际博物馆日”中国主会场活动、北京博物馆季及“看·见殷商”展即将举行的重要时...
赵乐际分别会见拉丁美洲议会议长... 转自:北京日报客户端全国人大常委会委员长赵乐际14日在北京分别会见拉丁美洲议会议长冈萨雷斯、中美洲议...
在古老的意大利科莫歌剧院,廖昌... 转自:上观新闻意大利当地时间5月12日晚,拥有212年历史的意大利科莫歌剧院迎来2024-2025年...
2025 新能源五大标杆车型解... 转自:衡水日报在 2025 年新能源汽车技术呈 "井喷式" 发展的大背景下,消费者对车辆的核心诉求已...
紫光原董事长赵伟国被判死缓,紫... 【#紫光原董事长赵伟国被判死缓#,#紫光原董事长曾被称为并购狂人#,紫光集团破产重组后如何“求生”?...
为什么南方人家里都有这种碗? 作者:敏敏 徐可心编辑:陈燕妮如果你来到南方的街头吃饭,很可能会看到一种印着大公鸡的碗。小红书上就有...