关于Document/View的问题!

askcsdn 2003-01-15 05:05:12
有这样一个MDI程序:
程序中有一个指向图形参数类的全局指针,如:CGraphPara *p_GraphPara;
文档类中有一个图形参数类的成员变量,如:CGraphPara m_GraphPara;
在文档类的构造函数中有如下操作:p_GraphPara = &m_GraphPara;
设计的原意是使p_GraphPara的值始终指向当前活动视图对应的文档中的m_GraphPara
我是这样实现的:
定义一个全局视类指针:CMyView *p_View;
重载OnActivateView():
void CMyView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
{
p_View = this;
p_GraphPara = &(p_View->GetDocument()->m_GraphPara);
CView::OnActivateView(bActivate, pActivateView, pDeactiveView);
}
但是当我新建多个文件或打开多个文件后,关闭某一个文件(子窗口)时总出错!
是不是还要处理像OnDestroy()之类的函数,如果是的话怎样处理?
请指教!!!
...全文
42 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
riverboat 2003-01-15
  • 打赏
  • 举报
回复
如果 yongdu 说的正确的话(我没有实验),关闭或者激活某一个文件(子窗口)时框架都要调用OnActivateView,这样你在关闭一个子窗口时就会重新将参数指针指向一个即将销毁的文档对象的成员!那么当这个文档对象销毁以后,参数指针自然就无效啦!
应该在 bActivate 参数为 true 的时候才进行指针的赋值操作吧。
hailong0108 2003-01-15
  • 打赏
  • 举报
回复
指针初始化没有。
askcsdn 2003-01-15
  • 打赏
  • 举报
回复
我是根据书中的例子改的程序,其实书中在OnAcitvateView()中根本就没对p_GraphPara进行操作。他只是在文档类的构造函数中给p_GraphPara赋了值:
p_GraphPara = &m_GraphPara;
但他的程序运行没错,而我的就不行(同他一样没在OnAcitvateView()中对p_GraphPara进行操作),调试时问题是p_GrapPara指向的对象已经无效了,所有的对象成员变量都是无效的,而我也查了程序,从没对p_GraphPara进行delete操作。很是奇怪!
askcsdn 2003-01-15
  • 打赏
  • 举报
回复
补充一下:我的OnDraw()函数中用到了p_GraphPara,错误好像就出在这里
foxmail 2003-01-15
  • 打赏
  • 举报
回复
直接用GetActiveView,不要处理ActiveView消息了
yongdu 2003-01-15
  • 打赏
  • 举报
回复
关闭某一个文件(子窗口)时总出错是因为active/deactive时框架都要调用OnActivateView.
yongdu 2003-01-15
  • 打赏
  • 举报
回复
改为:
p_GraphPara = &(p_pActivateView->GetDocument()->m_GraphPara);
wang790729 2003-01-15
  • 打赏
  • 举报
回复
不要用全局指针.试着用消息实现.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧