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);//更新视图

    }


  • 相关阅读:
    转发:招聘一个靠谱的 iOS
    转发:经典面试题
    APP上架证书无效:解决
    转发:Xcode插件
    Alcatraz:插件管理
    类似禅道的多条件搜索功能,比如或者并且和模糊查询和指定查询,见下图吧
    关于angularjs中,数据模型被改变,页面不刷新的解决办法
    angluar1+ionic详情页返回在原来的位置(缓存数据和页面高度)
    unable to resolve module react-native-gesture-handler from
    解决React Native:Error: Cannot find module 'asap/raw'
  • 原文地址:https://www.cnblogs.com/zfluo/p/5131905.html
Copyright © 2011-2022 走看看