当前位置:文档之家› MFC中控制系统音量类的实现

MFC中控制系统音量类的实现

1.在vc++ 6.0新建VolumeCtrl类2.VolumeCtrl.h文件// VolumeCtrl.h: interface for the CVolumeCtrl class.////////////////////////////////////////////////////////////////////////#include "windows.h"#include <mmsystem.h>#if !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INC LUDED_)#defineAFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000classCVolumeCtrl{public:CVolumeCtrl(CWnd *pParent);virtual ~CVolumeCtrl();public:BOOL GetVolume(DWORD &dwVol);//获取音量BOOL SetVoleme(DWORD dwVol);//设置音量BOOL amdGetVolumeControl();//得到音量控制设备句柄BOOL amdInitialize();//初始化BOOL amdUnInitialize();private:CWnd * m_hParent; //父窗口指针UINT m_nNumMixers; //混音设备个数HMIXER m_hMixer; //混音设备句柄MIXERCAPS m_mxcaps;CString m_strDsLineName,m_strVolumeControlName;DWORD m_dwMinimum,m_dwMaximum;DWORD m_dwVolumeControlID; //音量控制器ID};#endif// !defined(AFX_VOLUMECTRL_H__B8EA9E68_F433_4713_88C6_36B12F8D2A01__INCLUDE D_)3.VolumeCtrl.cpp文件// VolumeCtrl.cpp: implementation of the CVolumeCtrl class.////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "MediaPlayer.h"#include "VolumeCtrl.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif//////////////////////////////////////////////////////////////////////// Construction/Destruction//////////////////////////////////////////////////////////////////////CVolumeCtrl::CVolumeCtrl(CWnd *pParent){m_hParent=pParent;}CVolumeCtrl::~CVolumeCtrl(){amdUnInitialize();}BOOL CVolumeCtrl::amdInitialize(){m_nNumMixers= ::mixerGetNumDevs();m_hMixer = NULL;::ZeroMemory(&m_mxcaps,sizeof(MIXERCAPS));if(m_nNumMixers != 0){if(::mixerOpen(&m_hMixer,0,(DWORD)m_hParent->GetSafeHwnd(),NULL,MIXER_OBJECTF_ MIXER|CALLBACK_WINDOW)!=MMSYSERR_NOERROR){return FALSE;}if(::mixerGetDevCaps((UINT)m_hMixer,&m_mxcaps,sizeof(MIXERCAPS))!=MMSYSERR_NOERROR){return FALSE;}}else{return FALSE;}return TRUE;}BOOL CVolumeCtrl::amdUnInitialize(){BOOL bResult = TRUE;if(m_hMixer != NULL){if(::mixerClose(m_hMixer)!=MMSYSERR_NOERROR){bResult=FALSE;}m_hMixer = NULL;}returnbResult;}BOOL CVolumeCtrl::SetVoleme(DWORD dwVol){if(m_hMixer == NULL||m_strDsLineName.IsEmpty()||m_strVolumeControlName.IsEmpty()) {return FALSE;}MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = {dwVol};// MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = dwVol;MIXERCONTROLDETAILS mxcd;mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);mxcd.dwControlID = m_dwVolumeControlID;hannels = 1;mxcd.cMultipleItems = 0;mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);mxcd.paDetails = &mxcdVolume;if(::mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,MIXER_OBJECTF_HMIXER|M IXER_SETCONTROLDETAILSF_VALUE)!=MMSYSERR_NOERROR){return FALSE;}return TRUE;}BOOL CVolumeCtrl::GetVolume(DWORD &dwVol){if(m_hMixer == NULL ||m_strDsLineName.IsEmpty() ||m_strVolumeControlName.IsEmpty()){return FALSE;}MIXERCONTROLDETAILS_UNSIGNED mxcdVolume={dwVol};MIXERCONTROLDETAILS mxcd;mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);mxcd.dwControlID = m_dwVolumeControlID;hannels = 1;mxcd.cMultipleItems = 0;mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);mxcd.paDetails = &mxcdVolume;if(mixerSetControlDetails((HMIXEROBJ)m_hMixer,&mxcd,MIXER_OBJECTF_HMIXER|MI XER_SETCONTROLDETAILSF_VALUE)!=MMSYSERR_NOERROR){return FALSE;}dwVol = mxcdVolume.dwValue;return TRUE;}BOOL CVolumeCtrl::amdGetVolumeControl(){m_strDsLineName.Empty();m_strVolumeControlName.Empty();if(m_hMixer == NULL){return FALSE;}MIXERLINE mxl;mxl.cbStruct = sizeof(MIXERLINE);mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;if(::mixerGetLineInfo((HMIXEROBJ)m_hMixer,&mxl,MIXER_OBJECTF_HMIXER|MIXER_G ETLINEINFOF_COMPONENTTYPE)!=MMSYSERR_NOERROR){return FALSE;}MIXERCONTROL mxc;MIXERLINECONTROLS mxlc;mxlc.cbStruct = sizeof(MIXERLINECONTROLS);mxlc.dwLineID = mxl.dwLineID;mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;ontrols = 1;mxlc.cbmxctrl = sizeof(MIXERCONTROL);mxlc.pamxctrl = &mxc;if(mixerGetLineControls((HMIXEROBJ)m_hMixer,&mxlc,MIXER_OBJECTF_HMIXER|MIXE R_GETLINECONTROLSF_ONEBYTYPE)!=MMSYSERR_NOERROR){return FALSE;}m_strDsLineName = mxl.szName;m_strVolumeControlName = mxc.szName;m_dwMinimum = mxc.Bounds.dwMinimum;m_dwMaximum = mxc.Bounds.dwMaximum;m_dwVolumeControlID = mxc.dwControlID;return TRUE;}。

相关主题