MFC消息简介
来源:互联网 发布:js 多功能日历插件 编辑:程序博客网 时间:2024/05/22 00:47
Win编程自己半路出家,遇到了MFC特有的消息映射机制,和之前QT一样 也是一直连接(映射)的关系
就像信号和槽一样 在mfc 下 是ID(如果是mfc的组件)和ID的注册的消息映射
如果是用户自定义的消息的话
afx_msg LRESULT OnOpenAudioDialog(WPARAM, LPARAM); //自定义消息(音频管理)(函数)ON_MESSAGE(WM_OPENMANAGER, OnOpenManagerDialog) //建立消息映射到WM_OPEN的id enum{ UM_ICONNOTIFY= WM_USER+0x100, //系统的托盘消息 WM_ADDTOLIST = WM_USER + 102, // 添加到列表视图中 WM_OPENMANAGER, // 打开一个文件管理窗口}//自定义IDg_Dlg->PostMessage(WM_OPENMANAGERDIALOG, 0, (LPARAM)pContext);//这里就是发出这个ID消息 和信号类似
以下内容转自互联网,以加强自己的理解和认识 感谢这个ofs的时代
MFC的自定义消息(用户消息)的定义与使用
自定义消息的响应和资源消息的响应有很多类似之处;资源消息的响应是以资源的ID号作为标识的;自定义的消息要自己声明消息ID;
一. 定义:
第一步要声明消息:
#define WM_MYMSG WM_USER+200
第二步要在类声明中声明消息映射:
DECLARE_MESSAGE_MAP()
第三步要在类声明中定义消息处理函数:
afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM);
在.cpp中做的工作:
第四步要实现消息映射:
BEGIN_MESSAGE_MAP()
ON_MESSAGE(WM_MYMSG,OnMyMsgHandler)
END_MESSAGE_MAP()
第五步要实现消息处理函数(当然可以不实现):
LRESULT CFrame::OnMyMsgHandler(WPARAM w,LPARAM l) { AfxMessageBox("Hello,World!"); return 0; }
二. 使用
如果该自定义消息所在的类是有CWnd派生出来的,且在本类中调用,那么我们可以调用CWnd::SendMessage()函数,具体定义为:
LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
此时我们只需要在引发消息的地方添加如下代码:
SendMessge(WM_MYMSG,0,0);
如果我们想在不同的情况下发送用户消息,我们只需要将SendMessage的后两个参数wParam,lParam加以标识即可;在消息处理函数,写一个if条件语句(或switch语句)就可以了;将不同情况下的用户消息区分开;
如果不在本类中响应自定义消息;那么我们只能用win32 的API函数;例如,当自定义消息在CMainFrame中,而触发消息的地方不在CMainFrame类中,那么我们可以用如下语句:
::SendMessge(::AfxGetMainWnd()->m_hWnd,WM_MYMSG,0,0);
TODO()
- MFC消息简介
- mfc消息反射机制简介
- MFC程序中消息以及函数的处理顺序简介!
- MFC程序中消息以及函数的处理顺序简介
- MFC程序中消息以及函数的处理顺序简介
- MFC消息
- MFC--消息
- MFC消息
- MFC 消息
- MFC简介
- MFC 简介
- MFC简介
- MFC简介
- MFC简介
- mfc简介
- Win32中窗口的创建和消息机制以及MFC对Win32的封装简介
- Win32中窗口的创建和消息机制以及MFC对Win32的封装简介
- MFC消息完成消息反射
- IDEA配置github并上传项目
- 机器学习实战python版决策树以及Matplotlib注解绘制决策树
- JSP--第十三天
- Password Hacking CSU 1966
- tail
- MFC消息简介
- 倒计时 js
- Case Studio 2连接数据库反向生成schema
- spring cloud 使用feign 遇到问题
- java枚举常量的使用
- C语言中矩阵定义问题(续)
- 每天一个linux命令(25):文件权限命令 chgrp命令
- java初级开发面试题全集(上)
- JS正则表达式(密码同时包含数字和字母)