我编写了一个基于对话框的程序.
程序运行完后本想把程序的运行结果
输出到另外的一个对话框的编辑框中.
但为何我
.....
CString a;
a.Format(" %d",运行结果);
COutput final_output;
final_output.m_edit.SetWindowsText(a);
.....(其中COutput是我另外做的输出对话框,
m_edit是它里面的编辑框
绑定的CEdit类的变量)会在运行时出错???(编译时没错!!)
请各位高手帮忙??我已经试了很多种情况了,都不行!!
VC为什么会这样??要实现应该如何做???
谢谢!!
程序运行完后本想把程序的运行结果
输出到另外的一个对话框的编辑框中.
但为何我
.....
CString a;
a.Format(" %d",运行结果);
COutput final_output;
final_output.m_edit.SetWindowsText(a);
.....(其中COutput是我另外做的输出对话框,
m_edit是它里面的编辑框
绑定的CEdit类的变量)会在运行时出错???(编译时没错!!)
请各位高手帮忙??我已经试了很多种情况了,都不行!!
VC为什么会这样??要实现应该如何做???
谢谢!!
1.在你的当前对话框 *.cpp 文件中声名一个全局的 a 比如 CString a;
2.对 a 进行相关操作,设置值
3.在 COutput 对话框的 *.cpp 文件中,用到它的地方引用它 extern CString a;
COutput final_output;
final_output.str=a;这样就可以了;或者重载对话框的构造函数,这样调用COutput final_output(a);那要在OnInitDialog里面对edit进行处理
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 );
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 );
COutput final_output;
final_output.str=a;
------------------》和我的意思是两回事。
他的问题出在edit还没创建。
其他的都不是问题,我解决的方法是,在用的时候,用一个临时的变量保存,当edit创建成功后,再用数据交换update(false);
final_output.m_edit.SetWindowsText(a);
你也许想,这个COutput final_output就是原来显示在屏幕上的那个COutput对话框。其实不是的。这是新建了一个对话框。
这一句不对,你不能重新定义一个COutput的对象,而是应该取得以前创建的输出对话框的句柄.
等等我先试试.
COutput是我自己定义的对话框绑定的类.
既然str都创建了,m_Edit怎么就不可能创建?str只是一个c++成员变量,当COutput final_output实例产生的时候,作为成员的str,当然是有值的,
而当str和edit关联的时候,是要通过DoDataExchange的,这才是真正的关联。
既然str都创建了,m_Edit怎么就不可能创建?str只是一个c++成员变量,当COutput final_output实例产生的时候,作为成员的str,当然是有值的,而此时关联的edit,还没有create出来,他们之间是没有关系的。
而当str和edit真正关联的时候,是要通过DoDataExchange的,也就是要调用updatedata
为何要这样.
我的vc很菜!!
效果是不同的。