这个问题困绕我很久了,我想用slider来控制音量,于是在窗体中新建一个slider控件,id为IDC_SLD_AUDIO并赋予变量CMixerFader m_mainVolume;
控制声音方法如下:
m_mainVolume.SubclassDlgItem( IDC_SLD_AUDIO, this );
m_mainVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
NO_SOURCE,
MIXERCONTROL_CONTROLTYPE_VOLUME,
CMixerFader::MAIN );
为了使slider美观,于是我想对它进行自绘。因为m_mainVolume不能用下面的方法,于是我用classwizard又对IDC_SLD_AUDIO赋予了另一个变量值m_Volume,然后使用下面的代码:
m_hHandCur = this->GetSysHandCursor();
ASSERT( m_hHandCur != NULL );
m_lpActive = new CBitItem(IDB_BITMAP_ACTIVE, 0, 0);
m_lpNormal = new CBitItem(IDB_BITMAP_NORMAL, 0, 0);
m_lpThumb = new CBitItem(IDB_BITMAP_THUMB, 6, 12);
m_Volume.SetFlipCursor(m_hHandCur);
m_Volume.BuildThumbItem(m_lpThumb);
m_Volume.BuildBackItem(m_lpNormal, m_lpActive);
m_Volume.SetTopOffset(3);
m_Volume.SetRange(0, 100);
m_Volume.SetLineSize(0);
m_Volume.SetPos(0);
编译是没问题,但是运行后程序崩溃。为什么?怎么解决?谢谢!!
控制声音方法如下:
m_mainVolume.SubclassDlgItem( IDC_SLD_AUDIO, this );
m_mainVolume.Init( MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
NO_SOURCE,
MIXERCONTROL_CONTROLTYPE_VOLUME,
CMixerFader::MAIN );
为了使slider美观,于是我想对它进行自绘。因为m_mainVolume不能用下面的方法,于是我用classwizard又对IDC_SLD_AUDIO赋予了另一个变量值m_Volume,然后使用下面的代码:
m_hHandCur = this->GetSysHandCursor();
ASSERT( m_hHandCur != NULL );
m_lpActive = new CBitItem(IDB_BITMAP_ACTIVE, 0, 0);
m_lpNormal = new CBitItem(IDB_BITMAP_NORMAL, 0, 0);
m_lpThumb = new CBitItem(IDB_BITMAP_THUMB, 6, 12);
m_Volume.SetFlipCursor(m_hHandCur);
m_Volume.BuildThumbItem(m_lpThumb);
m_Volume.BuildBackItem(m_lpNormal, m_lpActive);
m_Volume.SetTopOffset(3);
m_Volume.SetRange(0, 100);
m_Volume.SetLineSize(0);
m_Volume.SetPos(0);
编译是没问题,但是运行后程序崩溃。为什么?怎么解决?谢谢!!
改成:class CMixerFader : public CBitSlider, public CMixerBase
哈哈,有创意
m_hHandCur = this->GetSysHandCursor();
ASSERT( m_hHandCur != NULL );
m_lpActive = new CBitItem(IDB_BITMAP_ACTIVE, 0, 0);
m_lpNormal = new CBitItem(IDB_BITMAP_NORMAL, 0, 0);
m_lpThumb = new CBitItem(IDB_BITMAP_THUMB, 6, 12);
m_Volume.SetFlipCursor(m_hHandCur);
m_Volume.BuildThumbItem(m_lpThumb);
m_Volume.BuildBackItem(m_lpNormal, m_lpActive);
m_Volume.SetTopOffset(3);
m_Volume.SetRange(0, 100);
m_Volume.SetLineSize(0);
m_Volume.SetPos(0);
参考一下