Example #1
0
//-------------------------------------------------------------------------------------
bool DlgEffectBase::CProcessTask::OnProgressUpdate (int nFinishPercentage)
{
    if (!m_continue_process)
        return false ;

    nFinishPercentage = FClamp(nFinishPercentage, 0, 100) ;

    if (nFinishPercentage % 5)
        return true ; // span == 5
    if (m_nLastPercent == nFinishPercentage)
        return true ;

    FCObjImage   & img = m_pDlg->m_curr ;
    FCObjImage   * pLayer = m_pDlg->m_layer ;

    // update status
    m_nLastPercent = nFinishPercentage ;
    m_pDlg->PostMessage(WM_PHOXO_PROCESS_STEP, m_id) ;

    // update view every 20%
    if ((nFinishPercentage >= m_nLastUpdate+20) || (nFinishPercentage == 100))
    {
        int   nStart = img.Height() * m_nLastUpdate / 100 ;
        int   nEnd = img.Height() * nFinishPercentage / 100 ;
        if (nFinishPercentage == 100)
            nStart = 0 ;

        // update view
        for (int y=nStart ; y < nEnd ; y++)
        {
            for (int x=0 ; x < img.Width() ; x++)
            {
                *(RGBQUAD*)pLayer->GetBits(x,y) = *(RGBQUAD*)img.GetBits(x,y) ;
            }
        }

        m_pDlg->m_view->Invalidate() ;
        m_nLastUpdate = nFinishPercentage ;
    }
    return true ;
}