⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proppage_adv.cpp

📁 音频编码
💻 CPP
字号:
/* *  LAME MP3 encoder for DirectShow *  Advanced property page * *  Copyright (c) 2000-2005 Marie Orlova, Peter Gubanov, Vitaly Ivanov, Elecard Ltd. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include <streams.h>#include <olectl.h>#include <commctrl.h>#include "iaudioprops.h"#include "mpegac.h"#include "resource.h"#include "PropPage_adv.h"#include "Reg.h"#define         MPG_MD_STEREO           0#define         MPG_MD_JOINT_STEREO     1#define         MPG_MD_DUAL_CHANNEL     2#define         MPG_MD_MONO             3// Strings which apear in comboboxesconst char *chChMode[4] = {    "Mono",    "Standard stereo",    "Joint stereo",    "Dual channel"};////////////////////////////////////////////////////////////////// CreateInstance////////////////////////////////////////////////////////////////CUnknown *CMpegAudEncPropertyPageAdv::CreateInstance( LPUNKNOWN punk, HRESULT *phr ){    CMpegAudEncPropertyPageAdv *pNewObject        = new CMpegAudEncPropertyPageAdv( punk, phr );    if( pNewObject == NULL )        *phr = E_OUTOFMEMORY;    return pNewObject;}////////////////////////////////////////////////////////////////// Constructor////////////////////////////////////////////////////////////////CMpegAudEncPropertyPageAdv::CMpegAudEncPropertyPageAdv(LPUNKNOWN punk, HRESULT *phr) :    CBasePropertyPage(NAME("Encoder Advanced Property Page"), punk, IDD_ADVPROPS, IDS_AUDIO_ADVANCED_TITLE),    m_pAEProps(NULL){    ASSERT(phr);    InitCommonControls();}//// OnConnect//// Give us the filter to communicate withHRESULT CMpegAudEncPropertyPageAdv::OnConnect(IUnknown *pUnknown){    ASSERT(m_pAEProps == NULL);    // Ask the filter for it's control interface    HRESULT hr = pUnknown->QueryInterface(IID_IAudioEncoderProperties,(void **)&m_pAEProps);    if (FAILED(hr))        return E_NOINTERFACE;    ASSERT(m_pAEProps);    // Get current filter state//    m_pAEProps->LoadAudioEncoderPropertiesFromRegistry();    m_pAEProps->get_EnforceVBRmin(&m_dwEnforceVBRmin);    m_pAEProps->get_VoiceMode(&m_dwVoiceMode);    m_pAEProps->get_KeepAllFreq(&m_dwKeepAllFreq);    m_pAEProps->get_StrictISO(&m_dwStrictISO);    m_pAEProps->get_NoShortBlock(&m_dwNoShortBlock);    m_pAEProps->get_XingTag(&m_dwXingTag);    m_pAEProps->get_ChannelMode(&m_dwChannelMode);    m_pAEProps->get_ForceMS(&m_dwForceMS);    m_pAEProps->get_ModeFixed(&m_dwModeFixed);    return NOERROR;}//// OnDisconnect//// Release the interfaceHRESULT CMpegAudEncPropertyPageAdv::OnDisconnect(){    // Release the interface    if (m_pAEProps == NULL)        return E_UNEXPECTED;    m_pAEProps->set_EnforceVBRmin(m_dwEnforceVBRmin);    m_pAEProps->set_VoiceMode(m_dwVoiceMode);    m_pAEProps->set_KeepAllFreq(m_dwKeepAllFreq);    m_pAEProps->set_StrictISO(m_dwStrictISO);    m_pAEProps->set_NoShortBlock(m_dwNoShortBlock);    m_pAEProps->set_XingTag(m_dwXingTag);    m_pAEProps->set_ChannelMode(m_dwChannelMode);    m_pAEProps->set_ForceMS(m_dwForceMS);    m_pAEProps->set_ModeFixed(m_dwModeFixed);    m_pAEProps->SaveAudioEncoderPropertiesToRegistry();    m_pAEProps->Release();    m_pAEProps = NULL;    return NOERROR;}//// OnActivate//// Called on dialog creationHRESULT CMpegAudEncPropertyPageAdv::OnActivate(void){    InitPropertiesDialog(m_hwnd);    return NOERROR;}//// OnDeactivate//// Called on dialog destructionHRESULT CMpegAudEncPropertyPageAdv::OnDeactivate(void){    return NOERROR;}////////////////////////////////////////////////////////////////// OnReceiveMessage - message handler function////////////////////////////////////////////////////////////////BOOL CMpegAudEncPropertyPageAdv::OnReceiveMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){    switch (uMsg)    {    case WM_COMMAND:        switch (LOWORD(wParam))        {        case IDC_RADIO_STEREO:        case IDC_RADIO_JSTEREO:        case IDC_RADIO_DUAL:        case IDC_RADIO_MONO:            {                DWORD dwChannelMode = LOWORD(wParam) - IDC_RADIO_STEREO;                CheckRadioButton(hwnd, IDC_RADIO_STEREO, IDC_RADIO_MONO, LOWORD(wParam));                if (dwChannelMode == MPG_MD_JOINT_STEREO)                    EnableWindow(GetDlgItem(hwnd,IDC_CHECK_FORCE_MS),TRUE);                else                    EnableWindow(GetDlgItem(hwnd,IDC_CHECK_FORCE_MS),FALSE);                m_pAEProps->set_ChannelMode(dwChannelMode);                SetDirty();            }            break;        case IDC_CHECK_ENFORCE_MIN:            m_pAEProps->set_EnforceVBRmin(IsDlgButtonChecked(hwnd, IDC_CHECK_ENFORCE_MIN));            SetDirty();            break;        case IDC_CHECK_VOICE:            m_pAEProps->set_VoiceMode(IsDlgButtonChecked(hwnd, IDC_CHECK_VOICE));            SetDirty();            break;        case IDC_CHECK_KEEP_ALL_FREQ:            m_pAEProps->set_KeepAllFreq(IsDlgButtonChecked(hwnd, IDC_CHECK_KEEP_ALL_FREQ));            SetDirty();            break;        case IDC_CHECK_STRICT_ISO:            m_pAEProps->set_StrictISO(IsDlgButtonChecked(hwnd, IDC_CHECK_STRICT_ISO));            SetDirty();            break;        case IDC_CHECK_DISABLE_SHORT_BLOCK:            m_pAEProps->set_NoShortBlock(IsDlgButtonChecked(hwnd, IDC_CHECK_DISABLE_SHORT_BLOCK));            SetDirty();            break;        case IDC_CHECK_XING_TAG:            m_pAEProps->set_XingTag(IsDlgButtonChecked(hwnd, IDC_CHECK_XING_TAG));            SetDirty();            break;        case IDC_CHECK_FORCE_MS:            m_pAEProps->set_ForceMS(IsDlgButtonChecked(hwnd, IDC_CHECK_FORCE_MS));            SetDirty();            break;        case IDC_CHECK_MODE_FIXED:            m_pAEProps->set_ModeFixed(IsDlgButtonChecked(hwnd, IDC_CHECK_MODE_FIXED));            SetDirty();            break;        }        return TRUE;    case WM_DESTROY:        return TRUE;    default:        return FALSE;    }    return TRUE;}//// OnApplyChanges//HRESULT CMpegAudEncPropertyPageAdv::OnApplyChanges(){    m_pAEProps->get_EnforceVBRmin(&m_dwEnforceVBRmin);    m_pAEProps->get_VoiceMode(&m_dwVoiceMode);    m_pAEProps->get_KeepAllFreq(&m_dwKeepAllFreq);    m_pAEProps->get_StrictISO(&m_dwStrictISO);    m_pAEProps->get_ChannelMode(&m_dwChannelMode);    m_pAEProps->get_ForceMS(&m_dwForceMS);    m_pAEProps->get_NoShortBlock(&m_dwNoShortBlock);    m_pAEProps->get_XingTag(&m_dwXingTag);    m_pAEProps->get_ModeFixed(&m_dwModeFixed);    m_pAEProps->SaveAudioEncoderPropertiesToRegistry();    m_pAEProps->ApplyChanges();    return S_OK;}//// Initialize dialogbox controls with proper values//void CMpegAudEncPropertyPageAdv::InitPropertiesDialog(HWND hwndParent){    EnableControls(hwndParent, TRUE);    //    // initialize radio bottons    //    DWORD dwChannelMode;    m_pAEProps->get_ChannelMode(&dwChannelMode);    CheckRadioButton(hwndParent, IDC_RADIO_STEREO, IDC_RADIO_MONO, IDC_RADIO_STEREO + dwChannelMode);    if (dwChannelMode == MPG_MD_JOINT_STEREO)        EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_FORCE_MS), TRUE);    else        EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_FORCE_MS), FALSE);    //    // initialize checkboxes    //    DWORD dwEnforceVBRmin;    m_pAEProps->get_EnforceVBRmin(&dwEnforceVBRmin);    CheckDlgButton(hwndParent, IDC_CHECK_ENFORCE_MIN, dwEnforceVBRmin ? BST_CHECKED : BST_UNCHECKED);    DWORD dwVoiceMode;    m_pAEProps->get_VoiceMode(&dwVoiceMode);    CheckDlgButton(hwndParent, IDC_CHECK_VOICE, dwVoiceMode ? BST_CHECKED : BST_UNCHECKED);    DWORD dwKeepAllFreq;    m_pAEProps->get_KeepAllFreq(&dwKeepAllFreq);    CheckDlgButton(hwndParent, IDC_CHECK_KEEP_ALL_FREQ, dwKeepAllFreq ? BST_CHECKED : BST_UNCHECKED);    DWORD dwStrictISO;    m_pAEProps->get_StrictISO(&dwStrictISO);    CheckDlgButton(hwndParent, IDC_CHECK_STRICT_ISO, dwStrictISO ? BST_CHECKED : BST_UNCHECKED);    DWORD dwNoShortBlock;    m_pAEProps->get_NoShortBlock(&dwNoShortBlock);    CheckDlgButton(hwndParent, IDC_CHECK_DISABLE_SHORT_BLOCK, dwNoShortBlock ? BST_CHECKED : BST_UNCHECKED);    DWORD dwXingEnabled;    m_pAEProps->get_XingTag(&dwXingEnabled);    CheckDlgButton(hwndParent, IDC_CHECK_XING_TAG, dwXingEnabled ? BST_CHECKED : BST_UNCHECKED);    DWORD dwForceMS;    m_pAEProps->get_ForceMS(&dwForceMS);    CheckDlgButton(hwndParent, IDC_CHECK_FORCE_MS, dwForceMS ? BST_CHECKED : BST_UNCHECKED);    DWORD dwModeFixed;    m_pAEProps->get_ModeFixed(&dwModeFixed);    CheckDlgButton(hwndParent, IDC_CHECK_MODE_FIXED, dwModeFixed ? BST_CHECKED : BST_UNCHECKED);}////////////////////////////////////////////////////////////////// EnableControls////////////////////////////////////////////////////////////////void CMpegAudEncPropertyPageAdv::EnableControls(HWND hwndParent, bool bEnable){    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_ENFORCE_MIN), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_STEREO), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_JSTEREO), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_DUAL), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_RADIO_MONO), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_FORCE_MS), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_VOICE), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_KEEP_ALL_FREQ), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_STRICT_ISO), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_DISABLE_SHORT_BLOCK), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_XING_TAG), bEnable);    EnableWindow(GetDlgItem(hwndParent, IDC_CHECK_MODE_FIXED), bEnable);}//// SetDirty//// notifies the property page site of changesvoid CMpegAudEncPropertyPageAdv::SetDirty(){    m_bDirty = TRUE;    if (m_pPageSite)        m_pPageSite->OnStatusChange(PROPPAGESTATUS_DIRTY);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -