当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 在VC资源文件中加入声音资源

VC++
用 auto_ptr 类模板帮助动态内存管理
走近 STL
一步一步学STL标准模板库
使用 <multimap> 库创建重复键关联容器
使用 <map> 库创建关联容器
用 vectors 改进内存的再分配
用函数模板实现和优化抽象操作
STL 字符串类与 UNICODE 及其它......
如何在Dll中导出STL类
再谈“在STL列表(Lists)中插入不同类型的对象”
使用::std::vector<>作为管理动态数组的优先选择
三种常见中文内码的转换方法
JNI 中文处理问题小结
构建 GB2312 汉字库的 unicode 码表
正则表达式简介
在非MFC程序中引用CString
UTF-8与GB2312之间的互换
宽字符标量L"xx"在VC6.0/7.0和GNU g++中的不同实现
用VC++设计语法编辑器
C语言中对时间和日期的处理

VC++ 中的 在VC资源文件中加入声音资源


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 156 ::
收藏到网摘: n/a

  本文介绍如何在VC资源文件中加入自己的声音资源,使自己的应用程序可以播放声音。

  1、首先用文本编辑器(如记事本)打开资源文件(.rc文件)

  在最后加入自己的声音资源,如下IDW WAVE "c:\\kav\\sound\\virus.wav"

  保存资源文件。
  2、在应用程序中要播放声音的地方启动另一线程,用来播放声音:

AfxBeginThread((AFX_THREADPROC)sound,NULL,THREAD_PRIORITY_NORMAL);
  3、添加线程回调函数

  这里介绍加载资源的方法。首先用函数AfxGetInstanceHandle()获得实例的句柄,其次用函数FindResource找到自己的声音资源。

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

  找到声音资源后,要用LoadResource加入该资源

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

  最后锁定资源内存块,并返回所标定内存块的虚拟内存地址。如果该资源被成功锁定的话,则返回值指向该资源开始处的第一个字节:

LPVOID pv=LockResource()
  注意:若上述四步中的任何一步发生问题,则返回并释放相应的内存。接下去要做的事情就是根据文件数据类型进行数据加载。

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;
}