MFC自定义消息及响应(基本方法流程总结)
自定义消息(也可以直接添加消息)
流程如下:
一. .h文件中:
1 | #define WM_MYMSG WM_USER+8 |
在类中声明消息映射:
1 | DECLARE_MESSAGE_MAP() |
定义消息映射处理函数:
1 | afx_msg LRESULT MyMsgHandler( WPARAM , LPARAM ); |
二. 在.cpp中
要实现消息映射:
1 2 3 | BEGIN_MESSAGE_MAP(CMAINFRAME,CMDIFrameWnd) //CMAINFrame基于CMainFrame类 ON_MESSAGE(WM_MYMSG,OnMyMsgHandler) END_MESSAGE_MAP() |
然后就是实现函数了
1 | LRESULT CMainFrame::OnMyMsHandler(WPARAMW,LPARAML) |
在引发消息的地方写上:
1 | ::SendMessage(::AfxGetMainWnd->m_hWnd,WM_MYMSG,0,0); //WM_MYMSG是定义的消息名 |
注意:引发消息的地方在另一个界面或者另一个类:
第一种:在另一个类引发消息
在类外部发出消息:(在另一个类下定义)
1 2 | CMyTest *test= new CMyTest(); ::SendMessage(test->m_hWnd,WM_MYMSG,0,0); |
别忘了在这个类下面要销毁窗体
1 2 3 4 | CMyTest::~CMyTest() { CWnd::DestroyWindow(); } |
然后在 .cpp文件中作相应修改
1 2 3 4 5 6 7 8 | BEGIN_MESSAGE_MAP(CMyTest,CWnd) //CMyTest替换原来的类 ON_MESSAGE(WM_MYMSG,OnMyHandler) //OnMyHandler自定义函数 END_MESSAGE_MAP() LRESULT CMyTest::OnMyHandler(WPARAMW,LPARAML) { ... return 0; } |
第二种最简单的方法:
项目(右键)----------类向导-------------消息------------添加自定义消息
消息名以WM_开头
剩下的只需要在头文件开头处添加:
1 | #define WM_消息 WM_USER+8 |
即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)