首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

在 VC 資源檔中嵌入聲音資源並播放的完整指南

     編輯:關於VC++

前言

在 Windows 應用程式開發中,加入音效能大幅提升使用者體驗。本文將詳細說明如何在 Visual C++ 專案的資源檔(.rc)中嵌入自訂聲音資源,並透過多執行緒與 MFC 資源管理 API 實現非阻塞式播放。

步驟一:修改資源檔加入聲音資源

首先使用文字編輯器(如記事本)開啟專案的 .rc 檔案,在檔案末尾加入以下資源定義:

IDW WAVE "c:\\kav\\sound\\virus.wav"

其中 IDW 為自訂資源名稱,WAVE 為資源類型,路徑需使用雙反斜線跳脫。儲存後關閉檔案。

步驟二:建立播放執行緒

為避免播放聲音時凍結主介面,應另啟一執行緒處理播放邏輯:

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

步驟三:實作執行緒回呼函數

核心播放流程包含四個關鍵 API 呼叫:

  1. 取得模組控制代碼:AfxGetInstanceHandle()
  2. 尋找資源:FindResource(hModule, lpName, lpType)
  3. 載入資源:LoadResource(hModule, hResInfo)
  4. 鎖定記憶體:LockResource(hGlobal) 取得資料指標

若任一步驟失敗,需釋放已配置資源並返回錯誤。

完整播放函數範例

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 搭配 SND_MEMORY 旗標直接從記憶體播放,SND_SYNC 表示同步播放(執行緒會等待播放結束)。若需非同步播放,可改用 SND_ASYNC。

注意事項

  • 資源檔路徑在編譯時期解析,確保 .wav 檔案存在於指定路徑
  • 大型音效檔會增加執行檔體積,建議壓縮或外部載入
  • 執行緒結束前務必呼叫 FreeResource 釋放資源控制代碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved