zoukankan      html  css  js  c++  java
  • mfc多视图的创建


    该部分基础在理解mfc应用程序框架的基础上。

    通过窗口的分割可以得到多视图,但是在实际应用中更多的是以多文档的形式生成多视图程序的。多视图程序主要分为单一文档模板对应文档的多视图显示和多文档模板对应的文档的视图显示。

    下面以程序的形式展示:

    例1:单文档模板对应多视图

    新建项目Example1,当执行“窗口”|“斜体窗口”菜单命令时重新打开一个窗口

         1、利用mfc向导创建多视图应用程序框架Example1;

         2、为项目添加一个新的视图类CItalicView,基类为CView;

         3、编辑应用程序类CExample1App。

         (1)添加模板对象指针成员变量,并重写ExitInstance();

    classCExample1App: public CWinApp

    {

        public:

            .

            .

          CMultiDocTemplate*m_pTemplateItalic;

             virtual int ExitInstance();

             .

             .

     

    }

    (2)在应用程序源文件InitInstance()函数中添加并构建新的模板对象的代码,并编写虚函数ExitInstance()的实现代码

    BOOLCExample1App::InitInstance()

    {

             .

             .

             .

             .

             AddDocTemplate(pDocTemplate);

             m_pTemplateItalic = newCMultiDocTemplate(IDR_LI_TYPE,

             RUNTIME_CLASS(CExample1Doc);

             RUNTIME_CLASS(CChildFrame);

          RUNTIME_CLASS(CItalicView));

             .

    }

    intCExample1App::ExitInstance()

    {

    delete m_pTemplateItalic;

    .

    }

        4、编辑主框架类CMainFrame

    (1)打开IDR_LI_TYPE资源,在主菜单中加入菜单项"斜体窗口",并在CMainFrame类中添加对应的响应函数。

    voidCMainFrame::OnWindowItalic()

    {

    CMDIChildWnd * pActiveChild =MDIGetActive();//获得子窗口

    CDocument * pDocument;

    if(<pActiveChild  == NULL||

    (pDocument =pActiveChild -> GetActiveDocument())==NULL)

    {

    TRACEO("Warning,No ActiveDocument");

    AfxMessageBox(AFX_IDP_COMMAND_FAILURE);

    return;

    }

    //获得新的文档模板指针

    CDocTemplate* pTemplate =((CExample1App*)AfxGetApp())->m_pTemplateItalic;

    ASSERT_VALID(pTemplate)

    CFrameWnd* pFrame =pTemplate->CreateNewFrame(pDocument, pActiveChild);

    if(pFrame == NULL)

    {

    TRACEO("Warning, Failed to create newframe. ");

    return;

    }

    pTemplate->InitialUpdateFrame(pFrame,pDocument);//更新视图

    }


  • 相关阅读:
    linux里终端安转视频播放器的操作及显示
    String字符串操作
    普通类 抽象类 接口
    java基础
    关于window的端口查看及tomcat的端口修改问题
    eclipse的应用和整理
    mysql学习
    echarts的使用
    Failed to read candidate component class
    oracle学习笔记2
  • 原文地址:https://www.cnblogs.com/zfluo/p/5131905.html
Copyright © 2011-2022 走看看