MFCCGridCtrl

MFCCGridCtrl是一个专注于MFCC(Mel频率倒谱系数)处理的控件,它在音频分析和识别中扮演关键角色。本文详细探讨了MFCC的计算过程,包括预加重、分帧、窗函数应用、梅尔滤波器组、对数转换和离散余弦变换等步骤。同时,我们介绍了MFCCGridCtrl如何在实际应用中实现这些操作,并展示了如何使用该控件进行音频特征提取,对于语音识别、音乐分类等任务具有重要意义。

公司项目用到了MFCCGridCtrl,比起MFC原生的控件来说,这个控件用起来还是不错的(不过这一点也不足以让我喜欢上MFC),用CCGridCtrl控件做了一个表格,根据需求将其中的某些项变成了下拉框或是复选框。但是加入后问题来了,当双击时,被双击的项都会变成一个编辑框,无论被双击的项是原生的表格还是下拉框或是复选框,下拉框倒好解决,只需在初始CCGridCtrl控件时设置下拉框项的风格为CBS_DROPDOWNLIST即可:
void CNetWorkDlg::SetCellCombo(int Row, int Col, CStringArray &items)
{
	m_GridList.SetCellType(Row, Col, RUNTIME_CLASS(CGridCellCombo));
	CGridCellBase* pCell = m_GridList.GetCell(Row, Col);

	if( CGridCellCombo *pItem = dynamic_cast<CGridCellCombo *>(pCell) )
	{
		pItem->SetStyle(CBS_DROPDOWNLIST);
		pItem->SetOptions(items);

		if( items.GetSize() > 0 )
		{
			pItem->SetText(items.GetAt(0));
		}
	}
}



在初始化函数中调用上述函数即可。


但是复选框项好像就不是那么简单了,开始以为CCGridCtrl控件提供了相应的方法,只是我没有发现,于是上网搜了下希望发现这一办法,搜了一圈没搜到,只有自己写了。


首先是初始化部分:
void CNetWorkDlg::SetCellCheck(int Row, int Col, bool isCheck)
{
	m_GridList.SetCellType(Row, Col, RUNTIME_CLASS(CGridCellCheck));
	CGridCellBase* pCell = m_GridList.GetCell(Row, Col);

	if( CGridCellCheck *pItem = dynamic_cast<CGridCellCheck *>(pCell) )
	{
		pItem->SetCheck(isCheck);
		pItem->SetState(GVIS_READONLY);
	}
}


这里之后复选框项不可编辑了,但是单击复选框项时复选框项的选中状态却不改变了,这时需要对单击事件进行处理。


单击事件处理:
void  CNetWorkDlg::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
	*pResult = 0;
	NM_GRIDVIEW *pItem = reinterpret_cast<NM_GRIDVIEW *>(pNMHDR);

	if( NULL != pItem )
	{
		BOOL Check = 0;
		if( 3 == pItem->iColumn || 5 == pItem->iColumn || 8 == pItem->iColumn || 10 == pItem->iColumn )
		{

			CGridCellBase* pCell = m_GridList.GetCell(pItem->iRow, pItem->iColumn);

			if( CGridCellCheck *pItem = dynamic_cast<CGridCellCheck *>(pCell) )
			{
				Check = pItem->GetCheck();
				pItem->SetCheck(!Check);
			}
		}
	}
}




最后,关联控件
BEGIN_MESSAGE_MAP(CNetWorkDlg, CDialogEx)
	ON_NOTIFY(NM_CLICK, IDC_GRID, &CNetWorkDlg::OnClick)
END_MESSAGE_MAP()


这样就好了,记录一下,以后要是再用到MFCCGridCtrl控件就可以直接拿来用(还是不要用上的好。。。。)





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值