MFC单文档情况下新建窗口读取并修改主窗口变量的方法

RT,在主窗口点击某一按键后,新窗口会显示用以修改或添加主窗口下的对象,比如:Mainfrm.cpp中有Event类的指针newEvent,在点击“添加”按钮后执行new... RT,在主窗口点击某一按键后,新窗口会显示用以修改或添加主窗口下的对象,
比如:Mainfrm.cpp中有Event类的指针newEvent,在点击“添加”按钮后执行newEvent=new Event(构造函数各种参数);,之后
CAdditionalDialog dlg;
dlg.DoModal();

创建子窗口对象(属于CAdditionalDialog类,仅公有继承了CDialogEx类)并显示。子窗口中有一Event类型指针pEvent用以接收主框架的newEvent。但是如果在dlg.DoModal();之前加一句dlg.pEvent=newEvent;,在子窗口中使用pEvent指针调用成员函数会出现内存错误。求解?

ps:这样的话能不能用来修改主框架中newEvent所指对象的成员变量值?
回2L:

只在CMainFrame类的析构函数里有delete newEvent;,Event的参数是一个CTime对象和两个CString字符串。按钮的事件处理程序内容是:
CTime t = CTime::GetCurrentTime();
newEvent = new Event(t,_T("213"),_T("2333333"));
if (count == 0)
oldEvent = newEvent;
oldEvent->next = newEvent; //oldEvent保存上一个Event对象地址,第一次为初地址
CEventDialog dlg;
dlg.pEvent = newEvent;
dlg.DoModal();
count++; //MainFrame构造函数中已初始化为0
展开
 我来答
bhtzu
2015-06-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4262万
展开全部
你的使用思路没什么问题,DoModal模态调用前进行指针传递是正确的模态数据交互方法,之后进行指针操作也可以改变对象的值。
出问题,我认为应该是Event的特殊性造成的。模态调用的时候,父窗口处于“锁定”状态,任何涉及界面的方法都被禁止,事件也应该被禁止响应了。因此,如果你不是传递一个标准事件对象,而是自定义类数据,那么对指针操作是没有问题的(父类数据允许改变),问题应该出现在事件类会要求父窗口这个已经“锁定”的窗口进行响应。
龚炜林
2015-06-22 · TA获得超过1560个赞
知道大有可为答主
回答量:1102
采纳率:66%
帮助的人:585万
展开全部
只是指针的赋值,不会出现问题,你可以正常调用newEvent。你都在哪里有delete newEvent。
Event参数是些什么,调用什么成员的时候错误?
更多追问追答
追问
太长了,麻烦看一下问题补充。。。
下面接问题补充(补充也超字了。。。)
嗯,自己发现问题了,对象dlg在创建之后才进行指针地址的传递,所以在CAdditionalDialog的构造函数中使用pEvent的成员函数的做法是错误的。有没有办法让模态对话框出现时就显示出newEvent中的数据呢? 多谢大神
追答
怀疑你找错问题所在了,重点还是看你调用的什么成员错误,在CAdditionalDialog构造中

修改newEvent,也是允许的。我猜你的newEvent的相关调用要涉及CAdditionalDialog的窗口相关,而此时CAdditionalDialog的窗口(子窗口)未创建,从而错误。

要让对话框显示newEvent的数据,在CAdditionalDialog的OnInitDialog函数中
将其数据用相关控件显示就好。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式