Re: Progress Dialog Box
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;
}