现在有一个MFC工程(非对话框),我添加了一个对话框资源,该对话框资源有一个CProgressCtrl进度条,我使用CProgressCtrl m_pro作为该对话框类的成员变量,然而再把该对话框类作为view的成员变量,想在view里面访问进度条,设置进度条的范围等,但程序运行到这里马上出错,不知道为何,請大家指教?
具体关系如下:
UpdatePro.h //对话框资源生成类
CProgressCtrl m_pro;//作为对话框的成员变量dapView.h //view类
UpdatePro m_proDlg;对话框作为view的成员变量dapView.cpp
m_proDlg.m_pro.SetRange();//出错!

解决方案 »

  1.   


    1、对话框最好用非模态对话框;2、需要先打开对话框;3、保存好对话框的对象;4、设置进度条即可。m_proDlg.Create(...);  // 先打开这个对话框m_proDlg.m_pro.SetRange();
      

  2.   

    基础知识问题。你的对话框还没有Create或者DoModal,对话框中的控件对象是不会创建出来的。
      

  3.   

    要充分理解类和实例的关系。也许你的这个对话框已经运行了,但它只是和你View中的这个实例是用了同一个类,但不是同一个实例。
      

  4.   

    m_proDlg还没有创建,其子控件(包括m_pro)也是没有创建的,所以出错了。
      

  5.   

    要在对话框创建后,并且m_pro与控件建立关联后才能使用。
      

  6.   


    happyparrot大哥你好,我已经先使用DoModal才进行进度条设置的,但都出错,但我没尝试过使用Create,我先試試
      

  7.   


    cnzdgs兄你好,我已经建立了关联,应该是还没有创建的问题!我先尝试
      

  8.   

    那你的问题肯定就是我在3楼说的问题了。你这个DoModal的对话框实例是VIew中的么?贴来看看
      

  9.   


    现在先Create就可以了,之后设置进度条,然后在show出来显示进度,但我不明白使用DoModal为什么不行?代码如下:m_proDlg.DoModal();//这里DoModal
    //set progress bar range
    CString listXmlPath(appName.c_str());
    listXmlPath += _T("\\list.xml");
    if (m_ftp.getFtpFile(_T("li.xml"),listXmlPath))
    {
    int fileNum = 0;
    if(XmlDoc.LoadFile("li.xml"))
    {
    pElement = XmlDoc.RootElement();
    if(pElement != NULL)
    {
    pElement = pElement->FirstChildElement();
    while (pElement != NULL)
    {
    ++fileNum;
    pElement = pElement->NextSiblingElement();
    }
    XmlDoc.Clear();
    }
    }
    m_proDlg.m_pro.SetRange32(0,fileNum);//这里设置范围,就在这出错了!
    }
      

  10.   

    m_proDlg.DoModal(); <-DoModal后程序就停在这里,不会再运行下面的代码。//关闭对话框后,才接着运行下面的代码,但此对话框窗口已经删除,其包含的子控件(包括m_proDlg)也一同删除了。
      

  11.   

    你这里DoModal,那么下面的程序就不会被执行,直到你关闭这个对话框位置。所以到你出错行时,其实对话框应该已经被关闭了。
      

  12.   

    如果用DoModal,要在对话框内部来设置控件。