科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件应用MFC开发高级应用程序

应用MFC开发高级应用程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文就是针对如何在Visual C++环境中使用MFC类库来开发高级程序所需要解决的一些问题进行了的探讨

作者:苟建兵 来源:pcvc.net 2007年11月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
2、如何创建SDMV应用

  如何创建SDMV应用比较麻烦,下面通过举例来具体说明。该例子假设用户需要建棒图类型和曲线形式的两种视口,假设用户已经利用CView基类派生并且实现了这两个类,分别对应于CMyChart和CMyTraceView两个类。

  1) 在应用类(从CWinApp派生出来的类)的头文件中加入下列变量和函数原型说
明:

CMultiDocTemplate* m_pMyTraceTemplate;
CMultiDocTemplate* m_pMyChartTemplate;
int ExitInstance();

  2) 在应用类的InitInstance成员函数中删除对AddDocTemplate函数的调用和OpenFileNew()语句,并且加入如下代码:

m_pMyTraceTemplate = new CMultiDocTemplate(
IDR_MYTRACEVIEW,
RUNTIME_CLASS(CSimuDoc),
RUNTIME_CLASS(CMyChild), // Derived MDI child frame
RUNTIME_CLASS(CMyTraceView));

m_pMyChartTemplate = new CMultiDocTemplate(
IDR_MYCHART,
RUNTIME_CLASS(CSimuDoc),
RUNTIME_CLASS(CMyChild), // Derived MDI child frame
RUNTIME_CLASS(CMyChart));

  3) 实现ExitInstance()函数,在其中删除所用的两个辅助模板:

int CTestApp::ExitInstance()
{
 if(m_pMyChartTemplate) delete m_pMyChartTemplate;
 if(m_pMyTraceTemplate) delete m_pMyTraceTemplate;
 return TRUE;
}


  4) 在菜单资源中去掉File菜单中的New和Open项,加入New Chart View和New Trace View两项,在对应的菜单命令中实现如下:

void CMainFrame::OnNewMychart()
{
 // TODO: Add your command handler code here
 OnNewView(((CSimuApp*)AfxGetApp())->m_pMyChartTemplate);
}

void CMainFrame::OnNewMyTrace()
{
 // TODO: Add your command handler code here
 OnNewView(((CSimuApp*)AfxGetApp())->m_pMyTraceTemplate);
}

  上中OnNewView的实现如下:

BOOL CMainFrame::OnNewView(CMultiDocTemplate* pDocTemplate)
{
CMDIChildWnd* pActiveChild = MDIGetActive();
CDocument* pDocument;
if (pActiveChild == NULL ||
(pDocument = pActiveChild->GetActiveDocument()) == NULL)
{
TRACE0("Now New the specify view\n");
ASSERT(pDocTemplate != NULL);
ASSERT(pDocTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
pDocTemplate->OpenDocumentFile(NULL);
return TRUE;
}

// otherwise we have a new frame to the same document!
CMultiDocTemplate* pTemplate = pDocTemplate;
ASSERT_VALID(pTemplate);
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDocument, pActiveChild);
if (pFrame == NULL)
{
TRACE0("Warning: failed to create new frame\n");
return FALSE; // command failed
}
pTemplate->InitialUpdateFrame(pFrame, pDocument);
return TRUE;
}

  OnNewView是整个SDMV应用的核心组成,它的任务是创建一个新的指定类型的视口,它首先判断是否有活动视口存在,文档是否已经创建,正常情况下活动视口存在则表明文档存在,如果不存在则利用所指定的文档模板创建一个新的活动视口,否则则只创建视口,同时将其连接到已存在的文档对象上。

  通过以上步骤就可以实现SDMV应用,在其后的具体应用中利用文档对象的UpdateAllViews()函数和视口的OnUpdate()函数就可以很好的工作了。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章