dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
在应用程序中播放声音资源文件
来源: 天极开发 作者: 刘涛
教程推荐
·
·
·
·  
精彩专题
· ·
· ·
· ·
主题社区
· ·

  源代码下载

  如果能够在启动应用过程中再相应地添加声音文件的播放效果,那一定是件更令人高兴的事情,针对这个问题,本实例介绍了如何在Visual C++开发的应用程序中播放声音资源文件。

  一、实现方法

  为了保证程序的完整性,首先用文本编辑器(如记事本)打开应用程序的资源文件(.rc文件),在最后加入自己的声音资源,如下IDW WAVE "c:\\kav\\sound\\virus.wav",并保存资源文件。当然,开发人员也可以通过Visual C++的IDE环境向程序添加声音资源,这不是本实例讲述的重点,所以不再赘述。

  一般情况下,为了实现启动画面和声音同时播放的效果,可以在应用程序中要播放声音的地方启动另一线程,用来播放声音,虽然本实例没有启动画面,但是还是在一个线程中来实现声音资源文件的播放。启动线程的代码如下:

AfxBeginThread((AFX_THREADPROC)sound,NULL,THREAD_PRIORITY_NORMAL);

  上述函数中sound为一个回调函数,该函数首先用AfxGetInstanceHandle()函数获得应用程序实例的句柄,然后用函数FindResource()函数找到声音资源,该函数原型如下:

HRSRC FindResource(
 HMODULE hModule, // module handle
 LPCTSTR lpName, // resource name
 LPCTSTR lpType // resource type
)

  函数中参数hModule为模块句柄,lpName为资源名,lpType为资源类型名。

  找到声音资源后,用LoadResource()函数加装载资源,该函数原型如下:

HGLOBAL LoadResource(
 HMODULE hModule, // module handle
 HRSRC hResInfo // resource handle
);

  函数中参数hModule为模块句柄,hResInfo为资源句炳。

  最后调用LockResource()函数锁定资源块,并返回所标定内存块的虚拟内存地址。如果该资源被成功锁定的话,则返回值指向该资源开始处的第一个字节。注意:若上述四步中的任何一步发生问题,则返回并释放相应的内存。接下去要做的事情就是使用sndPlaySound()函数来播放声音资源文件了。

  二、编程步骤

  1、 启动Visual C++6.0,生成一个单文档视图结构的应用程序,将该程序命名为"PlaySound";

  2、 使用Class Wizard在应用程序的视图类中添加鼠标"左键按下"的消息响应函数,同时为程序添加声音文件资源IDW;

  3、 添加代码,编译运行程序;

  三、程序代码

///////////////////////////////////////////////////////////
void CPlaySoundView::OnLButtonDown(UINT nFlags, CPoint point)
{
 AfxBeginThread((AFX_THREADPROC)sound,NULL,THREAD_PRIORITY_NORMAL);
 CView::OnLButtonDown(nFlags, point);
}
UINT CPlaySoundView::sound(LPVOID pParam)
{
 HINSTANCE h=AfxGetInstanceHandle();
 HRSRC hr=FindResource(h,"IDW","WAVE");
 HGLOBAL hg=LoadResource(h,hr);
 LPSTR lp=(LPSTR)LockResource(hg);
 sndPlaySound(lp,SND_MEMORY|SND_SYNC);
 FreeResource(hg);
 return 0;
}

  四、小结

  本实例探讨了播放声音资源文件的办法,对于如何播放声音文件,只要调用sndPlaySound()函数就可以了,主要的工作还是在如何实现资源文件的装载上,其实在本书的一些实例中都涉及到了资源文件的装载,虽然资源类型不同,但是实现方法还是大同小异的。至于如何自由的操作声音文件,在《》中作了详细探讨,读者朋友可以参阅该实例。

软件频道精品推荐

更多精彩
点击体验>>


上一篇:Visual C++程序设计中的API和SDK   下一篇:VC++中利用/GS开关防止缓冲区溢出
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·Visual C++程序设计中的API和SDK
·VC++中利用/GS开关防止缓冲区溢
·VC++实现Windows回收站的文件存
·VC++设计基于ODBC的数据库管理系
·VC++实现工具栏上添加平面组合框
·用Visual C++实现PDF文件的显示
·用Visual C++设计“精灵”窗体
·在VC中添加响应自定义的消息的代
·VC++实现非窗口类中使用定时器的
·从MFC与ATL的男女关系说起
·OpenGL编程轻松入门之菜单管理
·VC中用简易方法实现淡入淡出的启
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763