zoukankan      html  css  js  c++  java
  • MFC MDI 窗口函数执行顺序

     

    MFC MDI 窗口函数执行顺序

    分类: MFC 165人阅读 评论(0) 收藏 举报

    (1)MDI窗口初始化时创建顺序(默认打开一个新文档):

    AddDocTemplate(pDocTemplate); CMainFrame* pMainFrame = new CMainFrame;

    CMainFrame::PreCreateWindow() 两次, CMainFrame::OnCreate,

    CMFC_frameDoc()构造函数,

    CChildFrame()构造函数, CChildFrame::PreCreateWindow 三次, 
    CMFC_frameView()构造函数, CMFC_frameView::PreCreateWindow一次
    再CChildFrame::OnCreate(),(如果主窗口有OnWindowPosChanged(),则会响应,可在此处使

    CChildFrame窗口移动),

    再CMFC_frameDoc::OnNewDocument()创建新文档.

    (2)有主窗口后,新建一个视图的过程(即按[新建]菜单):

    CMFC_frameDoc()构造函数,

    CChildFrame()构造函数, CChildFrame::PreCreateWindow 三次, ,

    CMFC_frameView()构造函数, CMFC_frameView::PreCreateWindow一次

    (2.1)关闭一个窗口view时,析构与创建相反:

    ~CMFC_frameView(), ~CChildFrame(), ~CMFC_frameDoc().

    (3)在view的函数中调用DestroyWindow();来即关闭view窗口时,doc析构,但CChildFrame依然存在,如果 frame有工具栏toolbar,且toolbar的父窗口是该CChildFrame,那么该toolbar仍然可以使用(因为该 toolbar属于CChildFrame,CChildFrame不消失,该toolbar也不消失),但某些按钮会变灰,如[保存],因 为没有view,所以也无[保存]一说了.

    而且此时,CChildFrame仍可以成为当前活动框架,即:
    CChildFrame *p= dynamic_cast < CChildFrame*> (GetActiveFrame());p仍有效,非0.

    注:我起的名字是MFC_frame,所以会有CMFC_frameDoc,CMFC_frameView.

    (4)在view的函数中GetParentFrame()->DestroyWindow(),即关闭整个框架,则view,doc,frame全部关 闭,析构顺序为: ~CMFC_frameView(), ~CMFC_frameDoc(), ~CChildFrame(). 此时不能再DestroyWindow()来关闭view了,否则会出错,因为关闭frame时把view,doc,frame全都关闭 了.

  • 相关阅读:
    Spring Boot
    AWS DynamoDB
    VBA读excel写xml
    WebSocket API 学习
    故障排除 Mybatis ORA-01000 和 本地缓存问题
    Java基础
    Java Tutorials Lambda表达式 翻译
    在代理环境中构建maven环境
    Pom
    我的JAVA笔记
  • 原文地址:https://www.cnblogs.com/mysunnyday/p/2341437.html
Copyright © 2011-2022 走看看