By they way, where I have Sleep(100); I should have put a comment there that
says lenghty process goes here.
AliR.
Well you forgot to show the window. And that while loop after
AfxBeginThread is messing you up.
How about this?
UINT DownloadFunction(LPVOID lParam)
{
CProgressDlgDlg *pDlg = (CProgressDlgDlg *)lParam;
pDlg->EnableWindow(FALSE);
pDlg->m_Dlg.ShowWindow(SW_SHOW);
pDlg->m_Dlg.m_ProgressBar.SetRange(0,100);
for (int i = 0; i < 100;i++)
{
pDlg->m_Dlg.m_ProgressBar.StepIt();
Sleep(100);
}
pDlg->m_Dlg.ShowWindow(SW_HIDE);
pDlg->EnableWindow(TRUE);
return 1;
}
void CProgressDlgDlg::OnBnClickedButton1()
{
if (m_Dlg.GetSafeHwnd() == NULL)
{
m_Dlg.Create(CProgressDialog::IDD,this);
}
AfxBeginThread(DownloadFunction,this);
}
AliR.
<vani.sathya@gmail.com> wrote in message
news:1174641668.869197.171650@l75g2000hse.googlegroups.com...
Hi All,
I'm very new to VC++ , MFC programming. I have a Button in a
property page. On clicking this button i want a "Progress Dialog Box"
to pop up and run as a seperate thread. The problem is i'm not able to
see the "Progress Dialog Box" and the application goes to hang state.
Please help.
Here's the part of the code..
********** In the property page*******************
void FlashDlg::OnDownloadButton()
{
abort_flag = FALSE;
thread_finished_flag = FALSE;
cpd.Create( );
CWinThread * dl_thread = AfxBeginThread(::DownLoadFunction, this);//
Start downloading thread
while (thread_finished_flag == FALSE)
if (cpd.CheckCancelButton()) abort_flag = TRUE;
AfxMessageBox(result_str);
}
UINT DownLoadFunction(LPVOID lParam)
{
FlashDlg * p = (FlashDlg *)lParam;
p->cpd.SetUpper(25);
for(int i=0 ; i < 25 ; i=i+2)
{
p->cpd.SetPos(i);
Sleep(100);
}
p->thread_finished_flag = TRUE;
return 0;
}
***************** In the ProgressDialog*****************
BOOL CProgressDlg::Create(CWnd *pParent)
{
// Get the true parent of the dialog
m_pParentWnd = CWnd::GetSafeOwner(pParent);
if((m_pParentWnd!=NULL) && m_pParentWnd->IsWindowEnabled())
{
m_pParentWnd->EnableWindow(FALSE);
m_bParentDisabled = TRUE;
}
if(!CDialog::Create(CProgressDlg::IDD,pParent))
{
ReEnableParent();
return FALSE;
}
return TRUE;
}