工控编程吧

标题: 上位机MFC单文档程序如何切换多视窗 [打印本页]

作者: qq263946146    时间: 2019-7-24 12:59
标题: 上位机MFC单文档程序如何切换多视窗
我们建立的单文档程序时,默认只有一个主框架,一个主窗口。
如何想要在主框架内显示不同视窗的话,要事先 准备多个视窗,通过代码切换。
例如我们这里创建程序后,自带了一个视窗class CGkbc8View : public CView。
我们可以再创建另一个视窗类class CDemoView2 : public CView。
然后我们就可以在主框架窗口调用下面代码,实现视窗的切换显示了

  1. void CMainFrame::SwitchView(int nView)
  2. {
  3.         //获得旧视图(活动视图)指针
  4.         CView* pOldView = GetActiveView();
  5.         //获得新视图指针
  6.         CView* pNewView = (CView*)GetDlgItem(nView);
  7.         if (pNewView == NULL)
  8.         {
  9.                 if (nView == 1)
  10.                 {
  11.                         pNewView = new CGkbc8View();
  12.                 }
  13.                 else if (nView == 2)
  14.                 {
  15.                         pNewView = new CDemoView2();
  16.                 }
  17.                 else
  18.                 {
  19.                         return;
  20.                 }

  21.                 CCreateContext context;
  22.                 context.m_pCurrentDoc = pOldView->GetDocument();

  23.                 //创建新视图
  24.                 pNewView->Create(NULL, NULL, WS_BORDER, CFrameWnd::rectDefault,
  25.                         this, nView, &context);
  26.                
  27.                 pNewView->OnInitialUpdate();
  28.         }

  29.         //设置新视图为活动视图
  30.         SetActiveView(pNewView);

  31.         //显示新视图
  32.         pNewView->ShowWindow(SW_NORMAL);       
  33.         //隐藏旧视图
  34.         pOldView->ShowWindow(SW_HIDE);

  35.         //设置旧视图ID
  36.         if (pOldView->GetRuntimeClass() == RUNTIME_CLASS(CGkbc8View))
  37.         {
  38.                 pOldView->SetDlgCtrlID(1);
  39.         }
  40.         else if (pOldView->GetRuntimeClass() == RUNTIME_CLASS(CDemoView2))
  41.         {
  42.                 pOldView->SetDlgCtrlID(2);
  43.         }
  44.         //设置新视图ID
  45.         pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);

  46.         //重新布局
  47.         RecalcLayout();                                                                               
  48. }
复制代码
我们可以添加一个菜单项的响应函数来调用 上面的代码
  1. void CMainFrame::OnSwitch()
  2. {
  3.         // TODO: Add your command handler code here
  4.         static int n1_2=2;
  5.         SwitchView(n1_2);
  6.         n1_2++;
  7.         n1_2 =n1_2>2?1:n1_2;
  8. }
复制代码
例程源代码下载:
(, 下载次数: 0)