我要实现这样的功能:A是主对话框,当要设置A中的一个控件的属性的时候会弹出B对话框,B对话框关闭的时候会将设置的属性值保存。然后再打开B对话框的时候B中显示的是上一次设置的值。我是这样做的:
将B的指针pB作为A的一个成员,在A的构造函数中:
  pB=new B();
在A中弹出B的时候:
  if(pB->DoModal()==IDOK)
   {
      pB->UpdateData(true);
    }可是我在执行pB->UpdateData(true);这一句的时候就会报错,不知是为什么?我这种方法有问题吗?

解决方案 »

  1.   

    你应当把A的属性值保存在A的成员变量中,每次启动B时,都用A中的值初始化B;
    B b;
    b.m_Width = m_Width;
    b.m_Height = m_Height;if(b.Domodal() == IDOK)
    {
       m_Width = b.m_Width;
       m_Height = b.m_Height;
    }
      

  2.   

    DoModal()显示对话框时是不用UpdateData()的,
    在A对话框中定义几个你需要保存的变量,如CString str1,str2;
    A对话框初始化时,赋给初值.
    用下面代码显示B对话框
    pB->m_str1 = str1;
    pB->m_str2 = str2;
    if(pB->DoModal()==IDOK)
       {
          str1 = pB->m_str1; 
          str2 = pB->m_str2;
       }
    如果关闭对话框后还要保存,那么最好用*.ini文件
      

  3.   

    楼上的说法是对的。至于为什么不能用UpdateData函数,请看贴:
      

  4.   

    http://expert.csdn.net/Expert/topic/2848/2848924.xml?temp=.494198
      

  5.   

    to : nemember(小悟) 我按你说的做了,可是我的B中有CComboBoxr控件m_com,我在A中显示B之前要给m_com赋初值,我这样做的时候:
      pB->m_com.AddString("aaa");
    执行上面这一句就会出错,而且m_com的初值是动态的,必须在A中给它赋,可是上面这样又赋不了,怎么办?谢谢名位!
      

  6.   

    看看我给你提供连接的帖子里我说的话吧。你就会明白了。模式对话框没有显示出来前,任何试图对控件进行的操作都会导致失败,因为控件还没有创建呢。句柄都是0x00000000。你可以将这个要写到ComboBox的值写记录下来,在B对话框中随便定义一个字符串成员变量,定义B的实例后,将这个字符串赋给成员变量,然后在B对话框的初始化函数中进行AddString就可以了。
      

  7.   

    可是我要在关闭B之后还能保存m_com中选中的项,在下次再显示B的时候,就显示上次选中的值,该怎么办呢?
      

  8.   

    在b中设计一个成员变量,去保存m_com的选中值!修改b中的构造构数,可以传递一个值!在构造构数中,保存这个值到一个成员变量中!在初始化函数中,将它设为你的m_com的值!
      

  9.   

    在A中弹出B的时候:
      if(pB->DoModal()==IDOK)
       {
          pB->UpdateData(true);
        }可是我在执行pB->UpdateData(true);这一句的时候就会报错,不知是为什么?我这种方法有问题吗?
    pB->UpdateData(true);这一句在你按ok进已经执行了.
    你可以直接使用pB的成员变量.
    此时对话框已经关闭,你无法UpdateData(