void CDlgVideoChat::OnReleasedcaptureSliderMic(NMHDR* pNMHDR, LRESULT* pResult) //麦克风声音控制
{
// TODO: Add your control notification handler code here
int m_level = m_ctrlMicVolume.GetPos();
if (m_dwAudioInstance != 0){
if (! SetMicVolume(4, m_level))
return;
}
UpdateData(FALSE);
*pResult = 0;
}
BOOL CDlgVideoChat::SetMicVolume(long dev, long vol)   
{   
long   device;   
bool   rc=false;   
MIXERCONTROL   volCtrl;   
HMIXER   hmixer;   
switch   (dev)   
{   
case   1:   
device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; 
break;   
case   2:   
device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; 
break;   
case   3:   
device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;  
break;   
case   4:   
device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
//device=MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
break;   
default:   
device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;   
}   

if(mixerOpen(&hmixer,   0,   0,   0,   0))  
return   0;   

if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))   
{   
vol=vol*volCtrl.Bounds.lMaximum/100;     
if(SetVolumeValue(hmixer,&volCtrl,vol))   
rc=true;   
}   
mixerClose(hmixer);     
return   rc;     

BOOL CDlgVideoChat::GetVolumeControl(HMIXER hmixer, long componentType, long ctrlType, MIXERCONTROL *mxc)   
{   
MIXERLINECONTROLS mxlc;   
MIXERLINE mxl;   
mxl.cbStruct = sizeof(mxl);   
mxl.dwComponentType = componentType;   
if(mixerGetLineInfo((HMIXEROBJ)hmixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) == MMSYSERR_NOERROR)   
{   
mxlc.cbStruct = sizeof(mxlc);   
mxlc.dwLineID = mxl.dwLineID;   
mxlc.dwControlType = ctrlType;   
mxlc.cControls = 1;   
mxlc.cbmxctrl = sizeof(MIXERCONTROL);   
mxlc.pamxctrl = mxc;   
if(mixerGetLineControls((HMIXEROBJ)hmixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) == MMSYSERR_NOERROR)  
return TRUE;
}   
return FALSE;   
}     
BOOL CDlgVideoChat::SetVolumeValue(HMIXER hmixer, MIXERCONTROL *mxc, LONG volume)   
{   
MIXERCONTROLDETAILS mxcd;   
MIXERCONTROLDETAILS_UNSIGNED vol;
vol.dwValue = volume;   
mxcd.hwndOwner = 0;   
mxcd.dwControlID = mxc->dwControlID;   
mxcd.cbStruct = sizeof(mxcd);   
mxcd.cbDetails = sizeof(vol);   
mxcd.paDetails = &vol;   
mxcd.cChannels = 1;   
if(mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE) == MMSYSERR_NOERROR) 
return TRUE;
return FALSE;
}