工控编程吧

标题: 上位机MFC如何实现单文档多视图结构 [打印本页]

作者: qq263946146    时间: 2019-7-26 12:15
标题: 上位机MFC如何实现单文档多视图结构
这个功能,意思是一个文档类可以在多个视窗类中使用。所以我们首先得要有多个视窗。
在建立多文档程序时,只有一个视窗类。
我们自己再新建一个,然后实现这两个视窗共同使用一个文档类
主要是在APP类的InitInstance函数内实现
  1. BOOL CMy123App::InitInstance()
  2. {
  3.         AfxEnableControlContainer();

  4.         // Standard initialization
  5.         // If you are not using these features and wish to reduce the size
  6.         //  of your final executable, you should remove from the following
  7.         //  the specific initialization routines you do not need.

  8. #ifdef _AFXDLL
  9.         Enable3dControls();                        // Call this when using MFC in a shared DLL
  10. #else
  11.         Enable3dControlsStatic();        // Call this when linking to MFC statically
  12. #endif

  13.         // Change the registry key under which our settings are stored.
  14.         // TODO: You should modify this string to be something appropriate
  15.         // such as the name of your company or organization.
  16.         SetRegistryKey(_T("Local AppWizard-Generated Applications"));

  17.         LoadStdProfileSettings();  // Load standard INI file options (including MRU)

  18.         // Register the application's document templates.  Document templates
  19.         //  serve as the connection between documents, frame windows and views.

  20.         CMultiDocTemplate* pDocTemplate;
  21.         pDocTemplate = new CMultiDocTemplate(
  22.                 IDR_MY123TYPE,
  23.                 RUNTIME_CLASS(CMy123Doc),
  24.                 RUNTIME_CLASS(CChildFrame), // custom MDI child frame
  25.                 RUNTIME_CLASS(CMy123View));
  26.         AddDocTemplate(pDocTemplate);

  27.                 //创建文档模板2
  28.         CMultiDocTemplate* pDocTemplate2;
  29.         pDocTemplate2 = new CMultiDocTemplate(
  30.                 IDR_MY123TYPE,
  31.                 RUNTIME_CLASS(CMy123Doc),
  32.                 RUNTIME_CLASS(CChildFrame),
  33.                 RUNTIME_CLASS(CDemoView));
  34.         AddDocTemplate(pDocTemplate2);
  35.        
  36.         // create main MDI Frame window
  37.         CMainFrame* pMainFrame = new CMainFrame;
  38.         if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  39.                 return FALSE;
  40.         m_pMainWnd = pMainFrame;

  41.         // Parse command line for standard shell commands, DDE, file open
  42. /*        CCommandLineInfo cmdInfo;
  43.         ParseCommandLine(cmdInfo);

  44.         // Dispatch commands specified on the command line
  45.         if (!ProcessShellCommand(cmdInfo))
  46.                 return FALSE;
  47. */
  48.                 //文档模板1新建一个文档
  49.         CMy123Doc* pDoc = (CMy123Doc*)pDocTemplate->OpenDocumentFile(NULL);
  50.         if (pDoc == NULL)
  51.         {
  52.                 return FALSE;
  53.         }
  54.         //文档模板2创建与文档相关联的框架窗口
  55.         CFrameWnd* pFrame = pDocTemplate2->CreateNewFrame(pDoc, NULL);
  56.         if (pFrame == NULL)
  57.         {
  58.                 return FALSE;
  59.         }
  60.         //文档模板2初始化框架窗口
  61.         pDocTemplate2->InitialUpdateFrame(pFrame, pDoc);
  62.                 //水平排列窗口
  63.         pMainFrame->MDITile(MDITILE_HORIZONTAL);
  64.        
  65.         // The main window has been initialized, so show and update it.
  66.         pMainFrame->ShowWindow(m_nCmdShow);
  67.         pMainFrame->UpdateWindow();

  68.         return TRUE;
  69. }
复制代码


也可源代码查看
(, 下载次数: 0)