打个比方,我想做这样一件事情:在一个循环里累加一个数,加到100万,同时使用一个进度条来显示进度,使用用户界面线程如何实现呢?

解决方案 »

  1.   

    BOOL CTestdlgDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    ...
    ((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->SetRange32(0, 1000);
    ...
    }void CTestdlgDlg::OnButton4() 
    {
    for (int i = 0; i < 1000; i++)
    {
    ((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->SetPos(i);
    ((CProgressCtrl*) GetDlgItem(IDC_PROGRESS1))->UpdateWindow();
    }

    }
      

  2.   

    老大,我需要线程,在这个过程中能够响应其他的windows消息
      

  3.   

    UINT MyThread(LPVOID lpParam);void CTestdlgDlg::OnButton4() 
    {
    ::AfxBeginThread(MyThread, (LPVOID) GetSafeHwnd());
    }
    UINT MyThread(LPVOID lpParam)
    {
    for (int i = 0; i < 1000; i++)
    {
    CDialog* pDlg = (CDialog*) CDialog::FromHandle((HWND) lpParam);
    ((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->SetPos(i);
    ((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->UpdateWindow();
    } return 0;
    }
      

  4.   

    派生一个线程类A(父类为:CWinThread),将你的窗口类作为A的子对象,然后可以在线程中操作((CProgressCtrl*) pDlg->GetDlgItem(IDC_PROGRESS1))->SetPos(i);
      

  5.   

    哦,这样啊。《visual C++技术内幕》里有一个例程,和你说的情况一模一样,好象是在第12章吧。 自己看看吧。
      

  6.   

    声明:
    static DWORD WINAPI workProc(LPVOID lpParam);
    定义:
    DWORD WINAPI workProc(LPVOID lpParam)
    {
    ...
    }
    m_hThread = ::CreateThread(NULL,0,workProc,(LPVOID)&参数,0,&id);// HANDLE m_hThread;
    // DWORD id = 0;
      

  7.   

    derive your own UI thread class from CWinThread ,and put your process bar UI into CXWinThread::Run(); function ,for more details ,see
    http://www.codeproject.com/threads/usinguithreads.asp