HRESULT CParamsManager::FlushEnvelope( DWORD dwParamIndex, REFERENCE_TIME refTimeStart, REFERENCE_TIME refTimeEnd) { if (dwParamIndex >= m_cParams) return E_INVALIDARG; if (!m_pParamInfos) return DMUS_E_NOT_INIT; if (refTimeStart >= refTimeEnd) return E_INVALIDARG; EnterCriticalSection(&m_ParamsCriticalSection); m_fDirty = TRUE; CCurveList *pList = &m_pCurveLists[dwParamIndex]; CCurveList TempList; CCurveItem *pCurve; while ((pCurve = pList->RemoveHead()) != 0) { if ((pCurve->m_Envelope.rtStart >= refTimeStart) && (pCurve->m_Envelope.rtEnd <= refTimeEnd)) { delete pCurve; } else { TempList.AddHead(pCurve); } } while ((pCurve = TempList.RemoveHead()) != 0) { pList->AddHead(pCurve); } LeaveCriticalSection(&m_ParamsCriticalSection); return S_OK; }