这个问题困绕我很久了,我想用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);
编译是没问题,但是运行后程序崩溃。为什么?怎么解决?谢谢!!

解决方案 »

  1.   

    m_mainVolume.SubclassDlgItem( IDC_SLD_AUDIO, this ); 与变量m_Volume相冲
      

  2.   

    CMixerFader 是什么基类?m_Volume是什么类型?
      

  3.   

    m_Volume是CBitSlider类型;CMixerFader是什么类型不太清楚,它的头文件定义是这样的class CMixerFader : public CSliderCtrl, public CMixerBase
      

  4.   

    想办法把CBitSlider的功能做到CMixerFader中,或者class CMixerFader再增加各CBitSlider父类?晕死
      

  5.   

    CBitSlider的定义是这样的class CBitSlider : public CSliderCtrl
      

  6.   

    class CMixerFader : public CSliderCtrl, public CMixerBase
    改成:class CMixerFader : public CBitSlider, public CMixerBase
    哈哈,有创意
      

  7.   

    m_mainVolume没有指定自绘的风格吧
      

  8.   

    我把下面的m_Volume都换成了m_mainVolume,怎么会不行呢?
    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);
      

  9.   

    http://blog.csdn.net/mynamelj/archive/2009/05/14/4180870.aspx
    参考一下