没有重画什么!
就想简单点....我用下面代码变色,在循环中...
m_Processor.SendMessage(PBM_SETBARCOLOR,0,
(LPARAM)(COLORREF)RGB(dwR+i,dwG,dwB));
但是,进度运行时 不断刷新,一闪一闪的....
有没有办法让他不闪........void CProcessorDlg::OnStart() 
{
 DWORD dwR = 0,dwG = 0,dwB = 0; //颜色
m_Processor.SetRange(0,200);//进度条范围
        m_Processor.SetPos(0);
 
for (int i = 0;i < 200;i++ )
{
m_Processor.SetPos(i);//进度加 1
m_Processor.SendMessage(PBM_SETBARCOLOR,0,
(LPARAM)(COLORREF)RGB(dwR+i,dwG,dwB)); //变色
::Sleep(5);//5毫秒,进度走一
}
}void CProcessorDlg::OnEnd() 
{
      m_Processor.SetPos(0);//回到开始
}

解决方案 »

  1.   

    试一试这样?
    void CProcessorDlg::OnStart() 
    {
     DWORD dwR = 0,dwG = 0,dwB = 0; //颜色
    m_Processor.SetRange(0,200);//进度条范围
            m_Processor.SetPos(0);
             SetTimer(1, 2000, 0); 
    }void CProcessorDlg::OnEnd() 
    {
          m_Processor.SetPos(0);//回到开始
    }
    static int i=0;
    void CProcessorDlg::OnTimer(UINT nIDEvent) 
    {
         if(nIDEvent != 1)
               return;
         m_Processor.SetPos(i);//进度加 1
         m_Processor.SendMessage(PBM_SETBARCOLOR,0,
                     (LPARAM)(COLORREF)RGB(dwR+i,dwG,dwB)); //变色
             i++;
        if(i == 200)
             KillTimer(1);
    }
      

  2.   

    http://www.vckbase.com/code/downcode.asp?id=1731
      

  3.   

    谢谢!用你的代码,进度条还是一闪一闪的...不用下面,就不闪.
    m_Processor.SendMessage(PBM_SETBARCOLOR,0,
                     (LPARAM)(COLORREF)RGB(dwR+i,dwG,dwB)); //变色是不是要换个地方发消息..老兄,有没有其他办法....vckbase的这段代码重画了CProgressCtrl..俺还没全看懂它的代码..
      

  4.   

    还是麻烦一下......
    还有个怪问题.... 我按了 OnStart() 后,进度条一点点的读,读完后,我按OnEnd()复位到开始,然后我在按OnStart() ,进度条很快读完(而且不停).不知是不是,TIME消息优先级较低的原因.
    我实习第二天,项目紧没办法.谢谢!!!!
    void CProcessorDlg::OnStart() 
    {
        m_Processor.SetRange(0,200);//进度条范围
        m_Processor.SetPos(0);
        SetTimer(1, 50, 0);
    }
    void CProcessorDlg::OnEnd() 
    {
          KillTimer(1);
          m_Processor.SetPos(0);//回到开始
    }
    static int i=0;
    void CProcessorDlg::OnTimer(UINT nIDEvent) 
    {
        DWORD dwR = 0,dwG = 0,dwB = 0; //颜色
         if(nIDEvent != 1)
               return;
         m_Processor.SetPos(i);//进度加 1
         m_Processor.SendMessage(PBM_SETBARCOLOR,0,
             (LPARAM)(COLORREF)RGB(dwR+i,dwG,dwB)); //变色
             i++;
        if(i == 200)
          KillTimer(1);
    }