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 展开
比如: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 展开
展开全部
只是指针的赋值,不会出现问题,你可以正常调用newEvent。你都在哪里有delete newEvent。
Event参数是些什么,调用什么成员的时候错误?
Event参数是些什么,调用什么成员的时候错误?
更多追问追答
追问
太长了,麻烦看一下问题补充。。。
下面接问题补充(补充也超字了。。。)
嗯,自己发现问题了,对象dlg在创建之后才进行指针地址的传递,所以在CAdditionalDialog的构造函数中使用pEvent的成员函数的做法是错误的。有没有办法让模态对话框出现时就显示出newEvent中的数据呢? 多谢大神
追答
怀疑你找错问题所在了,重点还是看你调用的什么成员错误,在CAdditionalDialog构造中
修改newEvent,也是允许的。我猜你的newEvent的相关调用要涉及CAdditionalDialog的窗口相关,而此时CAdditionalDialog的窗口(子窗口)未创建,从而错误。
要让对话框显示newEvent的数据,在CAdditionalDialog的OnInitDialog函数中
将其数据用相关控件显示就好。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询