我现在又一个单文档多视图的程序,已经建立好他们的关系,视图为CView1,CView2;
表现为当前运行时,只显示一个视图,即CView1显示的时候CView2隐藏,他们之间也可以相互切换显示; 现在的问题是,我想要分割CView2,而不分割CView1 如何操作呢?
表现为当前运行时,只显示一个视图,即CView1显示的时候CView2隐藏,他们之间也可以相互切换显示; 现在的问题是,我想要分割CView2,而不分割CView1 如何操作呢?
解决方案 »
- 讨论下设备描述符DeviceContext
- CGetList类里定义COleListDropTarget类的对象
- 关于C语言的file 以及C++的IOSTREAM库,以及MFC的CFile类,各有什么势,什么情况下最适合用哪个?
- vc 6中可以给程序增加一个开始界面,使用vc组件 visual stdio2005怎么做?
- 如何将一个DLL封装到我新的DLL里 最后只有一个新的DLL
- 菜鸟问一个问题:如何把下载的.dll文件或者.lib文件用在自己的project里?
- 无法解析的外部符号 __imp__InternetCloseHandle@4 包含哪个库啊??
- 如何使某窗口永远位于其他窗口之上
- 非常困惑!!我怎么在VC下删除一个类?(即等答复!!!)
- MSFlexGrid的问题!
- 如何设置通过调用CBaseOutputPin的GetDeliveryBuffer函数所获得的空闲sample的大小?
- 如何设置浮动工具栏的大小
你分割后,将view2/view3先不要显示,显示view1。
m_pOldView =pFrameWnd->GetActiveView();
if (pNewView != m_pOldView)
{ UINT nID = pNewView->GetDlgCtrlID();
pFrameWnd->SetActiveView(pNewView); //改变活动的视图
pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pNewView->ShowWindow(SW_SHOW); //显示新的视图 if (m_pOldView)
{
m_pOldView->SetDlgCtrlID(nID);
m_pOldView->ShowWindow(SW_HIDE); //隐藏旧的视图
} pFrameWnd->RecalcLayout(); //调整框架窗口
pFrameWnd->Invalidate();
}不过我觉得楼主可以考虑 fandh的方案。用隐藏/显示splitter的格子来实现切换。
CView2的OnCreate()里面写分割?如何写呢?我记着是在MainFrame的OnCreateClient里面写才对;
这个方法看起来不错,不过我现在很多的视图,大体上有17个视图,这样做,恐怕不好吧
CCreateContext context;
context.m_pCurrentDoc = GetDocument();//与文档建立关联
context.m_pCurrentFrame = GetTopLevelFrame();
context.m_pLastView = this;
context.m_pNewDocTemplate = NULL;然后使用context作为CSlpitterWnd::CreateView的最后一个参数
CCreateContext context;
context.m_pCurrentDoc = GetDocument();//与文档建立关联
context.m_pCurrentFrame = GetTopLevelFrame();
context.m_pLastView = this;
context.m_pNewDocTemplate = NULL; if(m_wndSplitter.CreateStatic(this,2,2)==NULL)
return FALSE;
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTrackingTestView),CSize (100,100), &context);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CGanttView),CSize(100,100),&context); 结果是,程序运行,但窗口没有分割
if(m_wndSplitter.CreateStatic(this,1,2)==NULL)