MFC 用Slider控件控制音量

</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来填充的 内存区域的开始地址。
Length :准备用0来填充的 内存区域的大小,按 字节来计算。

返回值

作用

ZeroMemory只是将指定的 内存块清零。
使用结构前清零,而不让结构的成员数值具有不确定性,是一个好的 编程习惯。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值