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

為 CButtonST 添加滑入播放聲音功能

     編輯:關於VC++

動機

CButtonST 功能強大,但缺少「滑入播放聲音」特效。本文示範如何擴充該類,支援預設提示音與自訂 WAVE 資源。

擴充步驟

  1. 專案加入 BCMenu.h/.cpp、BtnST.h/.cpp。
  2. 修改 BtnST.h:
    頂部加入多媒體支援:
    #include
    #pragma comment(lib, "Winmm.lib")
    類別中新增成員與介面:
    private:
        CString m_soundID;
        BOOL    m_bPlaySound;
    public:
        void PlaySound();
        void SetPlaySound(BOOL bPlaySound, LPCTSTR sID = NULL);
  3. 修改 BtnST.cpp:
    建構函數初始化:
    m_bPlaySound = FALSE; m_soundID = _T("");
    實現兩新函數:
    void CButtonST::PlaySound()
    {
        if (!m_bPlaySound) return;
        if (m_soundID.IsEmpty())
        {
            MessageBeep(-1); // 預設提示音
            return;
        }
        HINSTANCE hInst = AfxGetInstanceHandle();
        HRSRC hRes = FindResource(hInst, m_soundID, _T("WAVE"));
        HGLOBAL hGlob = LoadResource(hInst, hRes);
        LPSTR lpData = (LPSTR)LockResource(hGlob);
        sndPlaySound(lpData, SND_MEMORY | SND_ASYNC);
        FreeResource(hGlob);
    }
    
    void CButtonST::SetPlaySound(BOOL bPlaySound, LPCTSTR sID)
    {
        m_bPlaySound = bPlaySound;
        m_soundID = sID ? sID : _T("");
    }
  4. 在 OnMouseMove 觸發懸停時呼叫 PlaySound():
    if (wndUnderMouse && wndUnderMouse->m_hWnd == m_hWnd && wndActive)
    {
        if (!m_bMouseOnButton)
        {
            m_bMouseOnButton = TRUE;
            Invalidate();
            csTME.cbSize = sizeof(csTME);
            csTME.dwFlags = TME_LEAVE;
            csTME.hwndTrack = m_hWnd;
            ::_TrackMouseEvent(&csTME);
            PlaySound(); // 新增行
        }
    }
    else CancelHover();

測試驗證

測試一:預設提示音

// 對話框 OnInitDialog
m_btnDing.SetPlaySound(TRUE); // 僅啟用,不指定資源

測試二:自訂 WAVE

  1. 資源加入 .wav 檔,ID 設為 IDR_WAVE1(含引號)。
  2. m_btnMusic.SetPlaySound(TRUE, _T("IDR_WAVE1"));

編譯運行,滑過按鈕即可聽見聲音。注意:僅在 SetFlat(TRUE) 時生效。

結語

微小改動即賦予按鈕聽覺回饋,提升介面互動體驗。同理可擴充點擊音效、長按音效等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved