</pre><p> 1.首先从工具箱内选择slider控件然后添加变量</p><p>MIXERCONTROLDETAILS_SIGNED volStruct;<span style="white-space:pre"> </span>MIXERCONTROLDETAILS mxcd;<span style="white-space:pre"> </span>MIXERLINECONTROLS mxlc;<span style="white-space:pre"> </span>MIXERLINE mxl;<span style="white-space:pre"> </span>MIXERCONTROL mxc;<span style="white-space:pre"> </span>HMIXER m_hmx;</p><p> 2.在OnInitDialog()函数内</p><p></p><pre name="code" class="cpp">unsigned long err;
CString str;
err = mixerOpen(&m_hmx,0,0,0,0);
if(err)
{
MessageBox("ERROR:Can't open Mixer Device!");
}
其中
err = mixerOpen(&m_hmx,0,0,0,0);
为选择混音设备,当我们将其设为0时代表选择首选的混音设备<pre name="code" class="html">
ZeroMemory(&mxl,sizeof(mxl));
mxl.cbStruct = sizeof(mxl);
if(mixerGetLineControls((HMIXEROBJ)m_hmx,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE))
{
MessageBox("取得控制器失败!");
}
// 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum.
// 初始化MIXERCONTROLDETAILS结构体
ZeroMemory(&mxcd, sizeof(mxcd));
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof(volStruct);
mxcd.dwControlID = mxc.dwControlID;
mxcd.paDetails = &volStruct;
mxcd.cChannels = 1;
// 获得音量值
if(mixerGetControlDetails((HMIXEROBJ)m_hmx, &mxcd,
MIXER_GETCONTROLDETAILSF_VALUE))
{
MessageBox("无法获得音量");
}
m_volume.SetRange(mxc.Bounds.dwMinimum,mxc.Bounds.dwMaximum);
//m_volume.SetPos(mxc.Bounds.dwMaximum - volStruct.lValue);
m_volume.SetPos(30000);
setpos为设置初始位置
m_volume为slider控件的control类型变量,可以在类向导中添加再在项目-》类向导-》消息->中添加WM_HSCROLL函数
void CMy0121121399Dlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if((CWnd*)pScrollBar == (CWnd*)&m_volume)
{
int pos = mxc.Bounds.dwMinimum +m_volume.GetPos();
m_nVoiceNum=(int)(pos/65535.0*100);
//UpdateData(FALSE);
//CString str;
//str.Format("%.0f",m_nVoiceNum);
//GetDlgItem(IDC_VOICENYUM)->SetWindowTextA(str);
//MessageBox(str);
volStruct.lValue = pos; //想要设置的值
mixerSetControlDetails((HMIXEROBJ)m_hmx, &mxcd,
MIXER_SETCONTROLDETAILSF_VALUE);
}
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
若要设置成带数字提示的音量
可拖入editbox控件
并为其在类向导中添加Cstring类型变量在if语句中加入
m_nVoiceNum=(int)(pos/65535.0*100);
CString str;
str.Format("%.0f",m_nVoiceNum);
GetDlgItem(IDC_VOICENYUM)->SetWindowTextA(str);
代码即可
参考资料:
void ZeroMemory( PVOID Destination,SIZE_T Length );
参数
Destination :指向一块准备用0来填充的
内存区域的开始地址。
返回值
无
作用
ZeroMemory只是将指定的
内存块清零。
使用结构前清零,而不让结构的成员数值具有不确定性,是一个好的
编程习惯。