分成左右两个窗口,然后左边个不变,根据用户命令在右边切换到不同的视图,如v1,v2,v3在右边中切换.我在网上看到这个都能实现,我也做了.但是有一个问题啊.如最开始显示的是视图v1,v1中有一个文本框text1,我在这个文本框输入内容.
然后切换到v2或v3
再切换v1,文本框text1中的内容就没了哟,我想把切换之前把视图中的内容保存起来,切换回来的时候还存在.切换视图的代码如下(是基于SDI分割窗口哈.)void CMainFrame::SwitchToView(int nViewType)
{
CView* pView = (CView*)m_wndSplitter.GetPane(0,1);
CRect rcRight,rcFrame;
pView->GetClientRect(&rcRight);
GetClientRect(&rcFrame);
switch(nViewType)
{
case EDITVIEW: //CEditPaneView
{
if(!pView->IsKindOf(RUNTIME_CLASS(CEditPaneView)))
{
//删除旧的视图
m_wndSplitter.DeleteView(0,1);
//创建新的视图
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CEditPaneView),
CSize(rcRight.Width(),rcRight.Height()),NULL);
//调整分布
m_wndSplitter.RecalcLayout();
m_pEditView= (CEditPaneView*)m_wndSplitter.GetPane(0,1);
}
break;
}
case LISTVIEW: //CListPaneView
{
if(!pView->IsKindOf(RUNTIME_CLASS(CListPaneView)))
{
m_wndSplitter.DeleteView(0,1);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListPaneView),
CSize(rcRight.Width(),rcRight.Height()),NULL);
m_wndSplitter.RecalcLayout();
m_pListView= (CListPaneView*)m_wndSplitter.GetPane(0,1);
}
break;
}
default:
break;
}}
然后切换到v2或v3
再切换v1,文本框text1中的内容就没了哟,我想把切换之前把视图中的内容保存起来,切换回来的时候还存在.切换视图的代码如下(是基于SDI分割窗口哈.)void CMainFrame::SwitchToView(int nViewType)
{
CView* pView = (CView*)m_wndSplitter.GetPane(0,1);
CRect rcRight,rcFrame;
pView->GetClientRect(&rcRight);
GetClientRect(&rcFrame);
switch(nViewType)
{
case EDITVIEW: //CEditPaneView
{
if(!pView->IsKindOf(RUNTIME_CLASS(CEditPaneView)))
{
//删除旧的视图
m_wndSplitter.DeleteView(0,1);
//创建新的视图
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CEditPaneView),
CSize(rcRight.Width(),rcRight.Height()),NULL);
//调整分布
m_wndSplitter.RecalcLayout();
m_pEditView= (CEditPaneView*)m_wndSplitter.GetPane(0,1);
}
break;
}
case LISTVIEW: //CListPaneView
{
if(!pView->IsKindOf(RUNTIME_CLASS(CListPaneView)))
{
m_wndSplitter.DeleteView(0,1);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListPaneView),
CSize(rcRight.Width(),rcRight.Height()),NULL);
m_wndSplitter.RecalcLayout();
m_pListView= (CListPaneView*)m_wndSplitter.GetPane(0,1);
}
break;
}
default:
break;
}}
解决方案 »
- 我再MFC中使用ADO连接ACCESS数据库并进行操作总是出错,请问怎么回事?
- 我想找个VC网络编程老师,条件面议
- unsigned 转 CString 的问题(晕死了)
- 如何用批处理文件?十万火急,救命!!!
- 几个总结出来的小COM问题,搜索不到了,帮忙看看
- 请问,用acm函数能不能把一个8位的pcm编码格式转化成G.723格式的?50分奉送
- 怎样获取硬盘分区的目录及文件信息
- LV_ITEM lParam问题
- 请教如何捕获一个数据包?
- 错误描述: 多步 OLE DB 操作产生错误。请检查每个 OLE DB 状态值。
- MFC/ODBC 修改时为什么老是提示记录集是只读的?
- 怎样控制对话框在全屏模式下盖住任务栏,而不是隐藏任务栏。
这里关键是怎么在改变视图时,都调用了
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListPaneView),.....);
那么他在第0行,第1列创建的是一个新的视类,删除了原来的视类关键关键还是SpliterWnd类的用法吧?大家帮我看看吧.