vc在应用程序中播放声音资源文件

2016-02-19 13:57 28 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享vc在应用程序中播放声音资源文件的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

一、实现方法

   为了保证程序的完整性,首先用文本编辑器(如记事本)打开应用程序的资源文件(.rc文件),在最后加入自己的声音资源,如下IDW WAVE "c:kavsoundvirus.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
);

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

   函数中参数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++6.0的声音文件操作 》中作了详细探讨,读者朋友可以参阅该实例。

来源:http://www.tulaoshi.com/n/20160219/1605771.html

延伸阅读
首先,你必须手工将WAV文件加入到资源文件.rc 中。 象这样:wave 例子:cool wave c:projectssoundscool.wav 然后,在你需要播放WAV的地方加入下面的函数: bool playresource(lpstr lpname) { bool brtn; lpstr lpres; handle hres; hrsrc hresinfo; hinstance nl=afxgetinstancehandle...
内容: 一.下载并安装Easy Struts包二.配置和开发struts应用项目三.总结参考资料关于作者 相关内容: TCP/IP 介绍TCP/IP 介绍 -- Java 专区中还有: 教学工具与产品代码与组件所有文章实用技巧 刘冬 (winter.lau@163.com) 珠海市创我科技发展有限公司软件工程师 2003 年 7 月 一. 下载并安装Easy Struts包 1. Easy ...
标签: PHP
一、 XML简介 XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互、数据的存储与使用。 使用XML标准编码的数据具有能容易被人和计算机解释的意义和结构。XML数据是平台和应用程序独立的。不用多说,这本身就使XML成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途...
标签: Java JAVA基础
Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易。虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已...
摘要: 本文主要介绍了一种在MFC应用程序中实现起来比较方便的浏览PDF、Word格式文档文件的方法,同时给出了具体的编程步骤和较详细的实现代码。 概述 随着网络技术的迅速发展,越来越多的电子图书资料能够更加方便的从网上被检索、下载。其文件格式也不仅限于HTML格式的Web页,PDF、Word等多种格式也逐渐成为网络资料交换的主...

经验教程

873

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部