我编写了一个基于对话框的程序.
程序运行完后本想把程序的运行结果
输出到另外的一个对话框的编辑框中.
但为何我
.....
CString a;
a.Format(" %d",运行结果);
COutput final_output;
final_output.m_edit.SetWindowsText(a);
.....(其中COutput是我另外做的输出对话框,
m_edit是它里面的编辑框
绑定的CEdit类的变量)会在运行时出错???(编译时没错!!)
请各位高手帮忙??我已经试了很多种情况了,都不行!!
VC为什么会这样??要实现应该如何做???
谢谢!!

解决方案 »

  1.   

    可以把 a 声名成一个全局变量:
    1.在你的当前对话框 *.cpp 文件中声名一个全局的 a 比如 CString a;
    2.对 a 进行相关操作,设置值
    3.在 COutput 对话框的 *.cpp 文件中,用到它的地方引用它 extern CString a;
      

  2.   

    可能是m_edit的设备环境还没有创建就SetWindowsText的缘故,因为你的final_output什么都还没有干(除了运行构造函数外),不知道对不对?不过你可以这样做就可以实现你功能:用classwizard为你的EDIT关联一个CString str,然后
    COutput final_output;
    final_output.str=a;这样就可以了;或者重载对话框的构造函数,这样调用COutput final_output(a);那要在OnInitDialog里面对edit进行处理
      

  3.   

    COutput final_output;
    final_output.m_edit.SetWindowsText(a);//此时,final_output.m_edit还没有创建,没有窗口。此时调用SetWindowsText会出错。
    正确的做法是在COutput 中加一个变量如CString m_strTemp;
    则可以这样COutput final_output;
    final_output.m_strTemp = a;然后final_output.m_edit.SetWindowsText(final_output.m_strTemp );
      

  4.   

    COutput final_output;
    final_output.m_edit.SetWindowsText(a);//此时,final_output.m_edit还没有创建,没有窗口。此时调用SetWindowsText会出错。
    正确的做法是在COutput 中加一个变量如CString m_strTemp;
    则可以这样COutput final_output;
    final_output.m_strTemp = a;
    一定要保证对话框窗口存在
    然后final_output.m_edit.SetWindowsText(final_output.m_strTemp );
      

  5.   

    而且final_output.m_edit也有可能创建了,只是设备的环境还没有创建而已,我是这么理解的
      

  6.   

    用classwizard为你的EDIT关联一个CString str,然后
    COutput final_output;
    final_output.str=a;
    ------------------》和我的意思是两回事。
    他的问题出在edit还没创建。
    其他的都不是问题,我解决的方法是,在用的时候,用一个临时的变量保存,当edit创建成功后,再用数据交换update(false);
      

  7.   

    COutput final_output;
    final_output.m_edit.SetWindowsText(a);
    你也许想,这个COutput final_output就是原来显示在屏幕上的那个COutput对话框。其实不是的。这是新建了一个对话框。
      

  8.   

    to wwwllg(wwwllg):既然str都创建了,m_Edit怎么就不可能创建(当然不清楚MFC的内部机理,只是推测,也有可能这样的控件先没有创建),也可以在构造函数里面创建的。任何对控件的界面操作(如画图)都是要首先获得设备环境句柄的,就是pWnd->GetDC(),画过图都应该知道的啊
      

  9.   

    COutput final_output;
    这一句不对,你不能重新定义一个COutput的对象,而是应该取得以前创建的输出对话框的句柄.
      

  10.   

    看来大家都是高手啊.
    等等我先试试.
    COutput是我自己定义的对话框绑定的类.
      

  11.   

    to ygzdev
    既然str都创建了,m_Edit怎么就不可能创建?str只是一个c++成员变量,当COutput final_output实例产生的时候,作为成员的str,当然是有值的,
    而当str和edit关联的时候,是要通过DoDataExchange的,这才是真正的关联。
      

  12.   

    to ygzdev
    既然str都创建了,m_Edit怎么就不可能创建?str只是一个c++成员变量,当COutput final_output实例产生的时候,作为成员的str,当然是有值的,而此时关联的edit,还没有create出来,他们之间是没有关系的。
    而当str和edit真正关联的时候,是要通过DoDataExchange的,也就是要调用updatedata
      

  13.   

    请问楼上的高手,如何通过DoDataExchange()交换啊
    为何要这样.
    我的vc很菜!!
      

  14.   

    to  wwwllg(wwwllg) :我的理解是:m_Edit作为dialog的一个成员,dialog对象一创建,m_edit同str一样都已经存在于具体的地址空间(所以这个时候你可以给str一个值),也就是所谓的创建(并不一定非要create()后才叫创建,create()后很多东西都有了)。str和m_edit关不关联那是另外的事了。而setwindowtext那要对具体的设备环境进行操作,但这个时候设备环境还没有(比如可能需要在什么地方PrepareDC(),具体是不是不清楚),所以这时setwindowtext会出错!只是个人理解,不知道对不对,讨论一下
      

  15.   

    你们有没有注意到你们说的m_edit可能是不同的?绑定时他可以使句柄也可以使绑定变量
    效果是不同的。