CDocument *pDoc = GetActiveDocument();
CView *pOldView = GetActiveView();
CView *pNewView = (CView*)new courseview;//第一个VIEW
pNewView->Create(NULL,"Fac",AFX_WS_DEFAULT_VIEW,
rectDefault,this,AFX_IDW_PANE_FIRST,NULL);
pNewView->OnInitialUpdate();
pNewView->ShowWindow(SW_SHOW);
pOldView->ShowWindow(SW_HIDE);
pDoc->AddView(pNewView);
pDoc->RemoveView(pOldView);
SetActiveView(pNewView);
RecalcLayout();运行之后会出错,救命啊
CView *pOldView = GetActiveView();
CView *pNewView = (CView*)new courseview;//第一个VIEW
pNewView->Create(NULL,"Fac",AFX_WS_DEFAULT_VIEW,
rectDefault,this,AFX_IDW_PANE_FIRST,NULL);
pNewView->OnInitialUpdate();
pNewView->ShowWindow(SW_SHOW);
pOldView->ShowWindow(SW_HIDE);
pDoc->AddView(pNewView);
pDoc->RemoveView(pOldView);
SetActiveView(pNewView);
RecalcLayout();运行之后会出错,救命啊
解决方案 »
- 图像显示
- vc2005,MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main
- 菜鸟问题:关于CFile类的Seek函数返回值的问题.
- [急切求助]如何使用CreateFile & DeviceIOControl来禁止和启用优盘(在线等)?
- 用CreateProcess创建的进程和AfxBeginThread创建的线程与MsgWaitForMultipleObjects难以理解的关系
- com问题,看了许多例子,实现回调接口都是用进程内组件来实现,请问进程外组件如何实现回调,希望有源码例子
- win98下怎样把CRicheditvie变成透明窗口(100)
- com出错时返回的0x8000????怎么取得详细信息?
- 改变之后如何获取程序本身目录?
- 有关Mschart的疑问
- ole db 网络数据库开发技术
- 怎样让程序运行后想QQ一样
pDocTemplate = new CMultiDocTemplate(
IDR_MULPAITYPE,
RUNTIME_CLASS(CMulPaintDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMulPaintView));
AddDocTemplate(pDocTemplate);
pDocTemplate = new CMultiDocTemplate(
IDR_MULTEXT,
RUNTIME_CLASS(CTextDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CMyEditView));
AddDocTemplate(pDocTemplate);
POSITION pos=GetFirstViewPosition();
while(pos!=NULL)
{
CView *pView=GetNextView(pos);
//在此判断该View是否为你需要的,是则SetActiveView(...);}
class CRightPaneFrame : public CFrameWnd在框架窗口的OnCreateClient事件中
建立各视如:
BOOL CRightPaneFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
m_oneView = new ConeView;
m_oneView->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_ONE, pContext);
SetActiveView(m_oneView);
m_oneView->ShowWindow(SW_SHOW);
m_oneView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_nCurrentViewID = VIEW_1; m_twoView = new CtwoView;
((CView*) m_twoView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_2, pContext);
m_twoView->ShowWindow(SW_HIDE);
m_twoView->SetDlgCtrlID(VIEW_2);
RecalcLayout();
return TRUE;
}
再定义一个切换函数如:
void CRightPaneFrame::SwitchToView(UINT nView)
{
CView* pOldActiveView = NULL;
CView* pNewActiveView = NULL; switch (nView)
{
case VIEW_1:
pNewActiveView = (CView*) m_oneView;
break; case VIEW_2:
pNewActiveView = (CView*) m_towView;
break;
} switch(m_nCurrentViewID)
{
case VIEW_1:
pOldActiveView = (CView*) m_oneView;
break;
case VIEW_2:
pOldActiveView = (CView*) m_twoView;
break;
} if (pNewActiveView)
{
if (pOldActiveView == pNewActiveView) return;
SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pOldActiveView->ShowWindow(SW_HIDE);
pOldActiveView->SetDlgCtrlID(m_nCurrentViewID);
m_nCurrentViewID = nView;
RecalcLayout();
}
}需要切换的地方建立框架的实例,获得地址,调用,我的应用是在一个切分
窗口里,所以这样切换:
...
case CMD_00:
nView = VIEW_1;
break;
case CMD_01:
nView = VIEW_2;
break;
if (nView)
{
CRightPaneFrame* m_rf;
m_rf = (CRightPaneFrame*)GetMainView()->m_wndSplitter.GetPane(0,1);
m_rf->SwitchToView(nView);
}注意,因为我这样建立视:
m_oneView = new ConeView;
所以需改
class ConeView : public CView
{
DECLARE_DYNCREATE(ConeView)protected: //此处改为 public:
ConeView();
virtual ~ConeView();
....罗嗦一些,不知你能否明白?