博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC MDI 窗口函数执行顺序
阅读量:6823 次
发布时间:2019-06-26

本文共 1326 字,大约阅读时间需要 4 分钟。

 

分类: 
 
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全都关闭 了.

转载于:https://www.cnblogs.com/mysunnyday/archive/2012/02/07/2341437.html

你可能感兴趣的文章
带输入输出参数的存储过程
查看>>
字符编码简介
查看>>
LevelDB源码之六缓存机制
查看>>
双向链表
查看>>
安装unity3d多个版本共存
查看>>
如何获取模拟器安装的app的位置
查看>>
[LeetCode] Largest Rectangle in Histogram 解题报告
查看>>
apache配置中ProxyPassReverse指令的含义
查看>>
算法整理-二叉树和堆栈
查看>>
如何设计一个“高大上”的 logo
查看>>
clustalo安装
查看>>
[日常] Go语言圣经--示例: 并发的Clock服务习题
查看>>
SCUT个人整理的常见问题
查看>>
二十二、Command 命令模式
查看>>
HDU Just a Hook
查看>>
什么是webpack?
查看>>
20165206学习基础和C语言基础调查
查看>>
httpclient的几种请求URL的方式
查看>>
UIImageView动画 UISlider控制速度
查看>>
JAVA自学笔记08
查看>>