各位,紧急求救!有关多文档视图切换的问题!

huazaimh 2005-10-11 04:10:05
下面是源代码,在执行这段代码的时候呢,不会出错,过了以后啊
有时候是GetRuntimeClass()这里出问题,有时候呢,是IsKindOf()内存溢出
不知道是什么原因
能不能指点一下,这个任务比较急!谢谢谢谢!
void CMainFrame::SwitchView(int nForm)
{
//CDocument* pDoc = GetActiveDocument();
CView *pOldActiveView= GetActiveFrame()->GetActiveView(); //保存旧视图
CView *pNewActiveView=(CView*)GetDlgItem(nForm); //取得新视图
if(pNewActiveView==NULL)
{
switch(nForm)
//这些ID是对话框的标志符,但也可以用其他的标志
{
case IDD_HISTORY :
pNewActiveView=new CHisVideoView;
break;
case IDD_GZSIDESYS_FORM :
pNewActiveView=new CGZSideSysView;
break;
}
CCreateContext context; //将文挡和视图相连
context.m_pCurrentDoc=pOldActiveView->GetDocument();
pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);


pNewActiveView->OnInitialUpdate();
}

(CFormView*)pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
(CFormView*)pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图

if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CHisVideoView))
pOldActiveView->SetDlgCtrlID(IDD_HISTORY);
else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CGZSideSysView))
pOldActiveView->SetDlgCtrlID(IDD_GZSIDESYS_FORM);

(CFormView*)pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);

delete (CFormView*)pOldActiveView; //删除旧视图

pOldActiveView = NULL;

SetActiveView((CFormView*)pNewActiveView); //改变活动的视图


RecalcLayout(); //调整框架窗口
}
...全文
144 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
huazaimh 2005-10-12
to zxyjyzxyjy(星星):
可能是我没有描述清楚,如果是这样呢,我肯定自己能发现
  也能解决地,可惜不是!
在上面我描述了一下地!
回复
huazaimh 2005-10-12
楼上的大哥,我试过了
不行,现在的问题是呢,不仅仅是不反应
连起码的Button都不上下弹起
不知道是什么原因了
急切期望大伙指点一下,谢谢!
回复
goodboyws 2005-10-12
pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
CFrameWnd::rectDefault, this, nForm, &context);
改为
pNewActiveView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,
CFrameWnd::rectDefault, this, nForm, &context);

回复
zxyjyzxyjy 2005-10-12
不会吧,看看处理一个消息要加的三个地方是不是都加了,函数申明,消息影射,函数实现。
回复
huazaimh 2005-10-12
Nobody????
回复
huazaimh 2005-10-11
又有另外一个问题来了
就是在新呈现的FormView里面不响应鼠标事件
怎么办???
回复
huazaimh 2005-10-11
OK
谢谢谢谢各位大哥!
回复
goodboyws 2005-10-11
顺序问题
pNewActiveView->ShowWindow(SW_SHOW);
pNewActiveView->OnInitialUpdate();
SetActiveView(m_pNewActiveView);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
.....
RecalcLayout();
回复
zxyjyzxyjy 2005-10-11
把语句作些调整,如下:
SetActiveView((CFormView*)pNewActiveView);

(CFormView*)pNewActiveView->ShowWindow(SW_SHOW); //显示新的视图
(CFormView*)pOldActiveView->ShowWindow(SW_HIDE); //隐藏旧的视图
试试。


回复
huazaimh 2005-10-11
上面的兄弟按照你说的,我试了
是可以了
但是呢,现在有另外一个问题出来了
刷新的问题!
怎么办?
回复
zxyjyzxyjy 2005-10-11
不要以下两句。
//delete (CFormView*)pOldActiveView; //删除旧视图
//pOldActiveView = NULL;
回复
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2005-10-11 04:10
社区公告
暂无公告