程序流程是这样的:
  main()
{
    .........
    while()
  {
    //要在这里显示对话框ProgDlg 如:
     ProgDlg.DoModal();
      //对话框上有一个Progress 要显示while的执行的进度 如:
     Progress.StepIt();
      //这里的问题就是 ProgDlg.DoModl不是阻塞了吗? 这里该怎么处理?  
  }}
谢谢了~~~

解决方案 »

  1.   

    Progress.StepIt();不应该放这里把,放在ProDlg的处理函数里。
      

  2.   

    放在那个处理函数里呢? 无论是那个处理函数 程序执行到ProgDlg.DoModal()不是就被阻塞了吗? while()停止 Progress.StepIt()怎么显示进度?
      

  3.   

    ProgDlg.DoModal();
    这个函数不返回, 你下面的 Progress.StepIt(); 永远得不到执行.
    而你的 DoModal( )函数只有在你点了确定或者取消按纽时才会返回.
    也就是说在对话框关闭了之后才返回, 这时你当然已经不能执行 Progress.StepIt(); 
    你应该把进度条的处理放在对话框的一个方法里面, 并且在对话框没关闭之前执行.
      

  4.   

    没有办法 这个是做在一个Activex里的 因为不能直接添加一个Progress资源(我没找到)
    所以我就添加了一个Dialog 然后在Dialog上添加了一个Progress ....
    高手给点好办法吧!
      

  5.   

    我前面说了 Progress要显示while执行的进度 所以即使想楼上兄弟说的那样 好像也不能解决问题吧...
      

  6.   

    显示Dialog是为了显示Progress.... 有什么办法显示Dialog 程序流程有不会阻塞吗???
    谢谢大家啊 急等ing
      

  7.   

    用非摸态对话框,Create 一个,然后 ShowWindow()
      

  8.   

    多谢楼上兄弟: 一个模态对话框和一个非模态对话框是在创建上来区分的吗?
    Create创建的就是非模态对话框??? 
    ShowWindow显示 哪个是关闭函数??
    如果有答案 帖子一定加分!!!!!!!!!!!!!!!!!!!!!!
      

  9.   

    Create 出的就是非摸态的,可以释放焦点,摸态对话框就是 CDlg dlg;dlg.domodal(),这种对话框只要存在就不释放焦点,独占线程。
    ShowWindow(SW_SHOW) 显示窗口,
    ShowWindow(SW_HIDE) 隐藏窗口。用完后 DELETE 。
      

  10.   

    哪位高手帮帮忙啊~~~ 主要代码如下:        
             Dlg.Create(IDD_ProgDlg , NULL );
    Dlg.ShowWindow( SW_SHOW );
    //move dlg to center
    CRect rect;
    Dlg.GetWindowRect ( rect );
    int cxScr = GetSystemMetrics(SM_CXSCREEN);
    int cyScr = GetSystemMetrics(SM_CYSCREEN);
    int x = (cxScr - rect.Width ())/2;
    int y = (cyScr - rect.Height ())/2;
    Dlg.MoveWindow ( x , y ,rect.Width () , rect.Height () , true); //get the progress handle
    //CProgressCtrl *Prog = dynamic_cast<CProgressCtrl *>( Dlg.GetDlgItem( IDC_Prog ) );
    CProgressCtrl *Prog= (CProgressCtrl *)Dlg.GetDlgItem ( IDC_Prog );
    if(Prog==NULL)
    {
    AfxMessageBox( "Prog == NULL");
    return ;
    }
    Prog->SetRange ( 0 , (short)StreamFileInfo.nFileSizeLow );
    Prog->SetPos (0);
    Prog->SetStep (1);
             while()
           { 
              ...........
               Prog->SetIt();
               ............
            }
      .....................
           // delete Dlg; 加上这句要出错!
    上面代码有两个问题:1 Dlg并没有被放到屏幕中间啊 ?
     
    2 就是没有delete Dlg;那么在关闭网页的时候就会弹出“ 中止 调试 忽略”那个对话框 是怎么回事呢??? 
     帮帮忙啊~~~ 分我可以给啊~~~
      

  11.   

    不要用 Delete Dlg , 没必要的试试这个函数 dlg.CenterWindow()
      

  12.   

    虽然不用delete就没问题 但是new了 自然要用delete啊~~~
    还是不太明白~~~