VC++中如何使用Progress控件(一)

2013-01-25 13:06:28 · 作者: · 浏览: 792

 

  BEGIN_MESSAGE_MAP (CProgressDialog, CDialog)

  //{{AFX_MSG_MAP(CProgressDialog)

  //}} AFX_MSG_MAP

  END_MESSAGE_MAP()

  // CProgressDialog message handlersBOOL CProgressDialog::OnInitDialog()

  {

  CDialog::OnInitDialog();

  // TODO: Add extra initialization here

  m_ProgressCtrl.SetRange(0, 100);

  m_ProgressCtrl.SetPos(0);

  SetWindowText(m_Caption);

  if (! m_EnableCancel) {

  m_CancelButton.ShowWindow(SW_HIDE);

  }

  DWORD threadID;

  m_Thread=CreateThread(NULL, 0,

  (LPTHREAD_START_ROUTINE) CProgressDialog::Thread

  Proc,(LPVOID)this,0,&threadID);

  return TRUE; // return TRUE unless you set the focus to a control

  // EXCEPTION: OCX Property Pages should return

  FALSE

  }

  DWORD WINAPI

  CProgressDialog::ThreadProc(CProgressDialog* dlg)

  {DWORD ret=dlg- >ProgressProc();

  dlg->PostMessage(WM_COMMAND, IDOK);

  return ret;

  }

  void CProgressDialog::OnCancel()

  {

  // TODO: Add extra cleanup here

  if (m_EnableCancel) m_IsCancel=TRUE;

  }

  void CProgressDialog::OnOK()

  {

  // TODO: Add extra validation here

  WaitForSingleObject(m_Thread, INFINITE);

  CDialog::OnOK();

  }DWORD CMyProgressDialog::ProgressProc()

  {SetMessage("Progress...");

  for (int i=0;i<100;i++) {

  if (IsCancel()) break;

  Sleep(100);

  SetProgress(i);

  }

  return 0;

  }

  只需在应用Progress控 件的地方调用CMyProgressDialog类的对象即可。可根据不同的应用程序修改DWORD CMyProgressDialog::ProgressProc()这个继承函数的函数体来适应相应的程序。