在dll中的一个函数caculate中生成一个对话框
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CdllDialog dlldlg;
dlldlg.DoModal();在CdllDialog定义了进度条CProgressCtrl m_prg;
void CdllDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CdllDialog)
    DDX_Control(pDX, IDC_PROGRESS1, m_prg);
    //}}AFX_DATA_MAP
}函数
caculate()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CdllDialog dlldlg;
dlldlg.DoModal();int iMaxCountTestCommand=120;
dlldlg.m_prg.SetRange(0,iMaxCountTestCommand);
dlldlg.m_prg.SetPos(iMaxCountTestCommand*10/100);
..............................
}在应用程序中调用caculate函数,只显示了对话框,进度条没起作用,怎么回事啊?

解决方案 »

  1.   

    caculate()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CdllDialog dlldlg;
    dlldlg.DoModal();
    这里还能执行下去吗?不能执行下去了的。除非对话框关闭
    .................................
    int iMaxCountTestCommand=120;
    dlldlg.m_prg.SetRange(0,iMaxCountTestCommand);
    dlldlg.m_prg.SetPos(iMaxCountTestCommand*10/100);
    ..............................
    }
      

  2.   

    为什么哪?
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CdllDialog dlldlg;
    dlldlg.DoModal();
    只是创建一个对话框,对接下来有什么影响吗?
    应该怎么做那??
      

  3.   

    你把这些放到对话框的初始化函数中去就可以了
    int iMaxCountTestCommand=120;
    dlldlg.m_prg.SetRange(0,iMaxCountTestCommand);
    dlldlg.m_prg.SetPos(iMaxCountTestCommand*10/100);
      

  4.   

    DoModal 中会调用 RunModalLoop,此时在 DoModal 中伪造出一个消息循环,也就是说所有消息都在 DoModal 中被派发,既然是一个循环,当然后面的代码也就暂时不能执行了
    如 gohappy_1999 告诉你的方法,将这几句代码加入到
    CdllDialog 的 OnInitDialog 中去,如果你希望除了 DoModal 外还能有其它操作控制该 ProgressCtrl 的话,那么你可以在 DoModal 前创建一个工作线程来完成
      

  5.   

    可以创建一个非模式的对话框 用Create函数来创建