程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> vc在應用程序中播放聲音資源文件

vc在應用程序中播放聲音資源文件

編輯:vc教程

     如果能夠在啟動應用程序過程中再相應地添加聲音文件的播放效果,那一定是件更令人高興的事情,針對這個問題,本實例介紹了如何在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++6.0的聲音文件操作 》中作了詳細探討,讀者朋友可以參閱該實例。

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved