请教如何使用mciSendCommand调节MP3的音量

请问怎么使用mciSendCommand调节MP3的音量
找了很多的资料。都失败了
求教。
我是想自己做一个MP3播放器,现在在写一个类把这MCI封装起来
现在已经实现了打开,播放,暂停/继续,停止,关闭这些功能了
现在是想用VC6的滑块控件做一个音量的控制,但不知道该怎么做
用mciSendCommand

------解决方案--------------------
http://topic.****.net/u/20090723/15/136fa124-df26-4a55-83eb-36f4e62f4377.html?62667
------解决方案--------------------
我程序中完整的设置音量的函数代码,供参考
C/C++ code

// .h文件
bool WINAPI SetVolume(long dev,long vol);//设置设备的音量   
bool GetVolumeControl(HMIXER hmixer ,long componentType,long ctrlType,MIXERCONTROL* mxc);
bool SetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc, long volume);

// .cpp文件
bool WINAPI SetVolume(long dev,long vol)//设置设备的音量   
{   
    // dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN   
    // vol=0-100 表示音量的大小 , 设置与返回音量的值用的是百分比,即音量从0 - 100,而不是设备的绝对值   
    // retrun false 表示设置音量的大小的操作不成功   
    // retrun true 表示设置音量的大小的操作成功   

    long device;   
    bool rc=false;   
    MIXERCONTROL volCtrl;   
    HMIXER hmixer;   
    switch (dev)   
    {   
    case WAVE:   
        device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break;   
    case MIDI:
        device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break;   
    case LINE_IN:   
        device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break;   
    case MIC:
        device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;break;   
    default:   
        device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;   
    }   

    if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0;   

    if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))   
    {   
        vol=vol*volCtrl.Bounds.lMaximum/100;   
        if(SetVolumeValue(hmixer,&volCtrl,vol))   
            rc=true;   
    }   
    mixerClose(hmixer);   
    return rc;   
}   

bool GetVolumeControl(HMIXER hmixer ,long componentType,long ctrlType,MIXERCONTROL* mxc)   
{   
    MIXERLINECONTROLS mxlc;   
    MIXERLINE mxl;   
    mxl.cbStruct = sizeof(mxl);   
    mxl.dwComponentType = componentType;   
    if(!mixerGetLineInfo((HMIXEROBJ)hmixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE))   
    {   
        mxlc.cbStruct = sizeof(mxlc);   
        mxlc.dwLineID = mxl.dwLineID;   
        mxlc.dwControlType = ctrlType;   
        mxlc.cControls = 1;   
        mxlc.cbmxctrl = sizeof(MIXERCONTROL);   
        mxlc.pamxctrl = mxc;   
        if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE))   
            return 0;   
        else   
            return 1;   
    }   
    return 0;   
}

bool SetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc, long volume)   
{   
    MIXERCONTROLDETAILS mxcd;   
    MIXERCONTROLDETAILS_UNSIGNED vol;vol.dwValue = volume;   
    mxcd.hwndOwner = 0;   
    mxcd.dwControlID = mxc->dwControlID;   
    mxcd.cbStruct = sizeof(mxcd);   
    mxcd.cbDetails = sizeof(vol);   
    mxcd.paDetails = &vol;   
    mxcd.cChannels = 1;   
    if(mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE))   
        return 0;   
    return 1;   
}