vc关于两个对话框通信和全局变量

来源:百度知道 编辑:UC知道 时间:2024/05/16 23:50:32
问题是这样的:
mfc框架下增加了两个对话框资源为简单起见分别为a,b
a类中有个cstring类型变量str
在a类的onok函数中
{
str = "this is a.c";
b newb;
newb.domodal();
}
然后在b类中的onok函数中
{
a newa;
messagebox(newa.str);
cdialog:onok();
}
我相信大家明白我的意思,问题来了现在显示的str为空,我认为原因是我在b里创建的a类对象newa是没有调用onok的一个新的对象,所以这时str的值仍为空.(这个想法是对的吧,至少我认为是这样,这是问题一)
问题题二,我要是想在b中显示a类的在onok中赋值的str,我要怎么才能得到已经调用了onok的当前a类的对象呢.
问题三,这个问题当然可以用全局对象来做答,但小弟愚钝,请教如何用全局对象来做此题 ,谢谢大家帮忙了.
csdn铰接http://topic.csdn.net/u/20080124/22/9834a72c-37fa-4cc4-adcc-a69d4e8c5c05.html
你的理解基本正确,但第二个问题并没有回答啊.怎么得到已经调用了onok函数的a类对象呢,谢谢

你的思路很混乱!
首先,你要解决一个问题,就是告诉我你的意图是什么,哪个对话框是最先显示的?

问题1,你在a类的onok函数中给str赋值,而b类中建立对象newa时候并没有执行那个onok,onok得你显示对话框a并且点击了onok按钮后才执行,所以这个时候str还没有被赋值,就是cstring类的默认值空了。
问题2,用全局变量,方法见下面
问题3,虽然不是很明白你的意思,还是先根据我的理解回答一下

我觉得你的程序是a先显示,然后点击a中的onok按钮,弹出b来,这个时候点击b的onok按钮,会显示a中给str赋的值,如果是这样的你应该这样写:
首先打开b.h,加上个public cstring strb;
然后在a的onok中,
{
str = "this is a.c";
b newb;
newb.strb=str;
newb.domodal();
}

在b的onok中,

{
messagebox(strb);
cdialog:onok();
}

这样就行了。。。

tongyi

这个问题我也碰到过(相信大多数人都碰到过),在b类onok函数中生成的一个a的实例是全新的,并没有给它的str成员赋过值,所以调用此函数之后没反应,这和你理解的是一样的,我自己的解决办法是定义全局变量,先用它来获得a中str的值,再传至b中,因为自己是新手,所以不知道其它方法,不过这也算种方法呵呵