回调函数如何去控制进度条呢?
我是这样做的:
在回调函数中
CSClientDlg* pDlg=(CSClientDlg*)AfxGetMainWnd(); 
取得对话框的指针,然后改变进度条控件,可是这样效果是直接走到100%.
然后我就想,应该是CSClientDlg比较忙,没空理我。
所以我就打算再加一个Dlg,在回调函数中写。
m_pProgressDlg=new CProgressDlg;
_pProgressDlg->Create(IDD_DIALOG_PROGRESS, NULL);
m_pProgressDlg->ShowWindow(SW_SHOW);
p = (CProgressCtrl *)m_pProgressDlg->GetDlgItem(IDC_PROGRESS);
通过这个p来操作新的dlg上面的进度条,效果也是一样,直接走到头。
求救,求教!

解决方案 »

  1.   

    使用 Timer在OnInitDialog函数, 初始化a progress control 并启动timer. 
     m_progress.SetRange(0, 100);
     m_progress.SetStep(1);
     SetTimer(ID_PROGRESS, 50,0);
     void CProgress_TestDlg::OnTimer(UINT nIDEvent)
    {
     // TODO: Add your message handler code here and/or call default
     if (m_progress.GetPos()!=100)
     {
      m_progress.StepIt();
     }
     else
     {//If you want Send a Message, Send a your own message here. 
      m_progress.SetPos(0);
     }
     CDialog::OnTimer(nIDEvent);
    }
      

  2.   

    完全可以啊!在timer事件中计算文件传输比率,然后进行控制。
      

  3.   

    不行的,对话框再上传文件时不会马上响应Timer所做的事情!
      

  4.   

    执行上传时重新启动timer,上传完毕后停止timer。进度条也同时复位。
      

  5.   

    我知道哪里错了,不是你的问题。
    我在计算进度的时候两个ULONG类型的值相除,从而得到的不是0就是1
    谢谢你的关注.