转自 @cabeauty

源地址: http://blog.csdn.net/cabeauty/article/details/6238404

今天编写音频采集类,用到wave族函数。

由于wave族函数进行声音采集和播放时,会以下几个消息:
 MM_WIM_OPEN、 MM_WIM_DATA、MM_WIM_CLOSE、MM_WOM_OPEN、MM_WOM_DONE、MM_WOM_CLOSE

所以想在自己定义的类中能够响应这几个消息。

首先应将类定义为CWnd的派生类,因为MFC中的消息只发送给一个窗口或线程。

然后在自定义的类声明之后,还需要调用其Create函数创造一个窗口。然后就能够响应消息了。

其实定义为CCmdTarget的派生类就已经有消息响应的映射(CWnd也是CCmdTarget的派生类),利用VC类生成器,选择继承CCmdTarget类,自动生成的头文件和cpp文件中会出现如下的代码:

.h文件中:

//{{AFX_MSG(CSound)
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()

.cpp文件中:

BEGIN_MESSAGE_MAP(CSound, CWnd)
 //{{AFX_MSG_MAP(CSound)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

在其中加上响应的函数入口和对应消息即可:

.h文件:
 //{{AFX_MSG(CSound)
 afx_msg void OnMM_WIM_OPEN(UINT wParam,LONG lParam);
 afx_msg void OnMM_WIM_DATA(UINT wParam,LONG lParam);
 afx_msg void OnMM_WIM_CLOSE(UINT wParam,LONG lParam);
 afx_msg void OnMM_WOM_OPEN(UINT wParam,LONG lParam);
 afx_msg void OnMM_WOM_DONE(UINT wParam,LONG lParam);
 afx_msg void OnMM_WOM_CLOSE(UINT wParam,LONG lParam);
 afx_msg void OnDestroy();
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 //}}AFX_MSG

.cpp文件:
BEGIN_MESSAGE_MAP(CSound, CWnd)
 //{{AFX_MSG_MAP(CSound)
 ON_MESSAGE(MM_WIM_OPEN,OnMM_WIM_OPEN)
 ON_MESSAGE(MM_WIM_DATA,OnMM_WIM_DATA)
 ON_MESSAGE(MM_WIM_CLOSE,OnMM_WIM_CLOSE)
 ON_MESSAGE(MM_WOM_OPEN,OnMM_WOM_OPEN)
 ON_MESSAGE(MM_WOM_DONE,OnMM_WOM_DONE)
 ON_MESSAGE(MM_WOM_CLOSE,OnMM_WOM_CLOSE)
 ON_WM_DESTROY()
 ON_WM_CREATE()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

应用程序文件中调用create函数:
 m_sound.Create(_T("STATIC"), NULL, WS_CHILD | WS_VISIBLE,
 CRect(0, 0, 0, 0),this,1234,NULL);//1234为窗口ID

看了上面的材料时候实际我自己操作的时候还是有些出入的,经过查资料,修改为以下样式就可以用了:

.CPP文件:

BEGIN_MESSAGE_MAP(CMy_RecordDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_start, &CMy_RecordDlg::OnClickedStart)ON_BN_CLICKED(IDC_STOP, &CMy_RecordDlg::OnClickedStop)//ON_BN_CLICKED(IDC_SAVE, &CMy_RecordDlg::OnClickedSave)//  ON_BN_CLICKED(IDC_SAVE, &CMy_RecordDlg::OnClickedSave)ON_MESSAGE(MM_WIM_CLOSE,OnMM_WIM_CLOSE)ON_MESSAGE(MM_WIM_DATA,OnMM_WIM_DATA)ON_MESSAGE(MM_WIM_OPEN,OnMM_WIM_OPEN)
END_MESSAGE_MAP()

.h文件中

DECLARE_MESSAGE_MAP()afx_msg LRESULT OnMM_WIM_OPEN(WPARAM wParam,  LPARAM lParam);afx_msg LRESULT OnMM_WIM_DATA(WPARAM wParam,  LPARAM lParam);afx_msg LRESULT OnMM_WIM_CLOSE(WPARAM wParam,LPARAM lParam);

MFC中让自定义的类能响应消息相关推荐

  1. 在MFC中创建动态控件的生成与响应

    在MFC中创建动态控件的生成与响应 2008-10-22 作者:风林 网友评论 1 条 点击进入论坛 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建 ...

  2. MFC中动态创建button及添加响应事件

    MFC中动态创建button及添加响应的事件,主要步骤如下:  1.在头文件(**Dlg.h)中添加一个CButton类型,  例如:CButton btn;  2.在(**Dlg.cpp)的OnIn ...

  3. MFC中五个初始类的作用

    MFC中五个初始类的作用 https://blog.csdn.net/thisispan/article/details/7393401

  4. MFC开发过程中,自定义的类中做分割窗口的图像显示,GetDC出现问题:function does not take 0 parameters?

    做MFC分割窗口时,其中含有视类CxxVew窗口,含有General Class (自定义的类CMyXX),在CMyXX中使用GetDC时: CDC* pDC = GetDC(); 出现标题中的问题, ...

  5. Qt中的自定义模型类

    文章目录 1 Qt中的通用模型类 1.1 Qt中的通用模型类 1.2 Qt中的变体类型QVariant 2 自定义模型类 2.1 自定义模型类设计分析 2.2 自定义模型类数据层.数据表示层.数据组织 ...

  6. python 类中定义列表_Python3中的自定义列表类,具有

    我想用python3编写一个自定义列表类,就像在这个问题How would I create a custom list class in python?中一样,但与该问题不同,我想实现__get__ ...

  7. MFC中动态创建控件及添加消息响应的方法实例

    动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框, ...

  8. MFC中的文件对话框类CFileDialog详解

    目录 文件对话框的分类 文件对话框类CFileDialog 对话框选项常用属性(实例:dialog) 对话框常用方法 文件对话框实例 文件对话框的分类       文件对话框分为打开文件对话框和保存文 ...

  9. Spring Boot2.0+中,自定义配置类扩展springMVC的功能

    在spring boot1.0+,我们可以使用WebMvcConfigurerAdapter来扩展springMVC的功能,其中自定义的拦截器并不会拦截静态资源(js.css等). @Configur ...

  10. 在MFC中使用Static text控件显示消息

    1-新建一个MFC对话框xxDlg,从工具栏拖一个Static text控件到面板上,右键编辑属性,将ID改为IDC_ShowMsg 2-打开类视图,在CxxDlg上右键-->添加成员函数voi ...

最新文章

  1. 多层mvc,thikphp进阶
  2. 13位PM告诉你:「陌生人社交」如何逃离互加微信“魔咒”?
  3. vue 计算属性和data_vue之watch和计算属性computed
  4. C++预处理和头文件保护符
  5. linux下w和who使用说明
  6. Linux先发送条件变量,linux 条件变量 浅谈Linux条件变量的使用
  7. linux 脚本1加到100,shell脚本之从1加到100之和的思路
  8. 神经网络中常用激活函数总结
  9. HDU5763 another meaning -(KMP+DP)
  10. 基于scrapy-splash进行单页应用网站seo处理
  11. Wicket实战(二)hello world
  12. 树莓派 wiringpi 读取引脚_树莓派驱动的无人驾驶开发记录--驱动电机
  13. 无线网破解 跑字典 EWSA使用教程
  14. pmp知识点(7)-项目成本管理
  15. 阿卡迪亚大学计算机专业好考吗,考上阿卡迪亚大学有多难?
  16. C语言基础级——标准输入和输出
  17. 手机信息采集 ——基于ebay网站Apple手机案例分析
  18. 岭南学院python课程作业2-1
  19. java连接fdb文件_FDB文件扩展名 - 什么是.fdb以及如何打开? - ReviverSoft
  20. 网格搜索算法可以用于在给定的超参数空间中寻找最佳的超参数组合。具体步骤如下:

热门文章

  1. mac系统下为emacs设置中文字体,解决乱码问题
  2. 2、Python_Day_1_作业
  3. .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单
  4. 异构系统间Web Service通讯框架小结(补完企划)
  5. NET中的三种Timer的区别和用法
  6. 我的小站:诗词在线 http://www.chinapoesy.com 欢迎大家测试速度。特别是网通的。...
  7. [Diary]花草本没有错
  8. vue 如何读取编译携带的参数
  9. Floyd算法 C++实现
  10. Java——File类,递归