我想在函数里调用线程弹出一个对话框,在函数体里有运算部分,我想在运算结束时,让对话框自动关闭。怎么做呢?实验代码如下:
BOOL CMainFrame::test()
{
   THREAS *ptp=new  THREAS;
   AfxBeginThread(ThreadFunc,ptp);
for(int i;i<70000;i++)
{
    for(int j;j<70000;j++)
    {
        int k;
        k=0;
     }
}
   return TRUE;
}
UINT ThreadFunc(LPVOID pParam)
{ CDlgtest dlg;
dlg.DoModal();
// dlg.Create(IDD_DIALOG1,0);
// dlg.ShowWindow(SW_SHOW);         return true;
}我尝试了无模式和模式两种对话框。发现无模式出现一下就消失了,模式在运算结束后才弹出。
我怎样才可以让函数运行期间,一直有一个对话框?函数运行完对话框自动关闭呢?

解决方案 »

  1.   

    给 CDlgtest 发个消息,处理内容是关闭自己就行了
      

  2.   

    UINT ThreadFunc(LPVOID pParam)
    { CDlgtest *dlg = new CDlgtest;
    dlg.Create(IDD_DIALOG1,0);
    dlg.ShowWindow(SW_SHOW);         return true;
    }
    //改为在堆上生成对象
      

  3.   

    在CMainFrame中加个PUBLIC成员 CDlgtest dlg;重载下面这个函数,并修改像如下:
    LRESULT CDlgtest::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
    {
    // TODO: Add your specialized code here and/or call the base class
    switch(message)
    {
    case CLOSE_PROGRESS_DLG:
    CDialog::OnOK();
    break;
    }
    return CDialog::DefWindowProc(message, wParam, lParam);
    }
    、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、BOOL CMainFrame::test()
    {
       THREAS *ptp=new  THREAS;
       AfxBeginThread(ThreadFunc,this);
    for(int i;i<70000;i++)
    {
        for(int j;j<70000;j++)
        {
            int k;
            k=0;
         }
    }
    ::PostMessage(dlg->m_hWnd, CLOSE_PROGRESS_DLG,0,0);

       return TRUE;
    }UINT ThreadFunc(LPVOID pParam)
    {
    this->dlg.DoModal();
            return true;
    }
      

  4.   

    UINT ThreadFunc(LPVOID pParam)
    {
    (CMainFrame)pParam->dlg.DoModal();
            return true;
    }
      

  5.   

    在堆上生成对象用new操作符
    象你那样的话是对象在栈上生成的.
    无模式对象框里面没有消息循环,线程结束后对话框也消失了.
    而堆生成的对象要delete才能释放
      

  6.   

    我没有办法,程序已经要完成了,现在出了这个问题。只好反过来。大家帮帮忙。
    dingpiao() 你说的是用消息关闭它,现在还没消息他自己就关了,我想知道怎么办呀。
    可以叫他不要关。
      

  7.   

    UINT ThreadFunc(LPVOID pParam)
    { CDlgtest *dlg=new CDlgtest;
    // dlg->DoModal();
    dlg->Create(IDD_DIALOG1,0);
    dlg->ShowWindow(SW_SHOW);
    return true;
    }BOOL CMainFrame::test()
    {
      // MessageBox("come on baby!");
    THREAS *ptp=new  THREAS;
    AfxBeginThread(ThreadFunc,ptp);
    for(int i;i<70000;i++)
    {
     for(int j;j<70000;j++)
     {
       int k;
       k=0;
     }
    }

       return TRUE;
    }
    代码改成这样了,可是还是在分析结束后出现,而且还是闪一下就没有了,怎么好呢?
      

  8.   

    gohappy_1999(碧水蓝天) 
    我按你的作了
    没用的
      

  9.   

    //加个消息循环
    UINT ThreadFunc(LPVOID pParam)
    {         MSG msg; CDlgtest *dlg=new CDlgtest;
    dlg->Create(IDD_DIALOG1,0);
    dlg->ShowWindow(SW_SHOW);
             while(GetMessage( &msg, NULL, 0, 0 )) 
             {
               TranslateMessage(&msg);
               DispatchMessage(&msg);
             }
             return 0;
    }