我们建立的单文档程序时,默认只有一个主框架,一个主窗口。
如何想要在主框架内显示不同视窗的话,要事先 准备多个视窗,通过代码切换。
例如我们这里创建程序后,自带了一个视窗class CGkbc8View : public CView。
我们可以再创建另一个视窗类class CDemoView2 : public CView。
然后我们就可以在主框架窗口调用下面代码,实现视窗的切换显示了
- void CMainFrame::SwitchView(int nView)
- {
- //获得旧视图(活动视图)指针
- CView* pOldView = GetActiveView();
- //获得新视图指针
- CView* pNewView = (CView*)GetDlgItem(nView);
- if (pNewView == NULL)
- {
- if (nView == 1)
- {
- pNewView = new CGkbc8View();
- }
- else if (nView == 2)
- {
- pNewView = new CDemoView2();
- }
- else
- {
- return;
- }
- CCreateContext context;
- context.m_pCurrentDoc = pOldView->GetDocument();
- //创建新视图
- pNewView->Create(NULL, NULL, WS_BORDER, CFrameWnd::rectDefault,
- this, nView, &context);
-
- pNewView->OnInitialUpdate();
- }
- //设置新视图为活动视图
- SetActiveView(pNewView);
- //显示新视图
- pNewView->ShowWindow(SW_NORMAL);
- //隐藏旧视图
- pOldView->ShowWindow(SW_HIDE);
- //设置旧视图ID
- if (pOldView->GetRuntimeClass() == RUNTIME_CLASS(CGkbc8View))
- {
- pOldView->SetDlgCtrlID(1);
- }
- else if (pOldView->GetRuntimeClass() == RUNTIME_CLASS(CDemoView2))
- {
- pOldView->SetDlgCtrlID(2);
- }
- //设置新视图ID
- pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
- //重新布局
- RecalcLayout();
- }
复制代码 我们可以添加一个菜单项的响应函数来调用 上面的代码
- void CMainFrame::OnSwitch()
- {
- // TODO: Add your command handler code here
- static int n1_2=2;
- SwitchView(n1_2);
- n1_2++;
- n1_2 =n1_2>2?1:n1_2;
- }
复制代码 例程源代码下载:
|